2017-02-13 26 views
-3

Я пытаюсь получить этот скрипт для сравнения подкаталогов на основе имени файла, а затем только файлов, которые составляют 30 дней или младше. Синтаксис кажется приемлемым, но кодировка HandbrakeCLI не запускается.Скрипт Powershell запускается, но ничего не происходит

Clear screen 
    $SourceDir = "\\netshare\testing\Source\*.MP4" 
    $DestinationDir = "\\netshare\testing\Completed_mp4\*.MP4" 
    $s1 = get-childitem -path $SourceDir -Recurse -Force | Where-Object  {$_.LastWriteTime -gt (Get-Date).addDays(-30)} 
    $d1 = get-childitem -path $DestinationDir -Recurse 
    $results = @(compare-object $s1 $d1) | Where-Object {$_.Name -ne $_.Name} 
    $quantity = $results | measure 
    $Filecount = $quantity 

    $Process = 0; 
    foreach ($result in $results){ 

    Write-Host -----------------------------------------------------------------  
    Write-Host Handbrake Batch Encoding 
$Process++; 
$results = $file.DirectoryName + "\" + $file.BaseName + ".MP4"; 

$progress = ($Process/$filecount) * 100 
    $progress = [Math]::Round($progress,2) 

    #Clear-Host 
    Write-Host "Processing - $results" 
    Write-Host "File $Process of $Filecount - $progress%" 
    Write-Host ------------------------------------------------------------------------------- 
$s1 = get-childitem -path $SourceDir -Recurse -Force | Where-Object {$_.LastWriteTime -gt (Get-Date).addDays(-30)} 
$d1 = get-childitem -path $DestinationDir -Recurse 
Start-Process "C:\Users\Downloads\HandBrakeCLI-1.0.1-win-x86_64.exe -ArgumentList -q 25 -i '$results' -o '$d1'" 
} 

ответ

2
$results = @(compare-object $s1 $d1) | Where-Object {$_.Name -ne $_.Name} 

будет хорошим началом смотреть. Это не даст никаких результатов, если $_.Name не является NaN (что маловероятно).

После того, как вы зафиксировали, что должно быть сообщение об ошибке,

C:\Users\Downloads\HandBrakeCLI-1.0.1-win-x86_64.exe -ArgumentList -q 25 -i '$results' -o '$d1' 

не может быть запущен.

Обратите внимание, что вы используете кавычки вокруг всей строки, эффективно сообщая Start-Process, что все это программа для запуска. Что это не так.

Там нет необходимости Start-Process здесь в любом случае, хотя, вы должны быть в состоянии использовать только

C:\Users\Downloads\HandBrakeCLI-1.0.1-win-x86_64.exe -q 25 -i $results -o $d1 

(Отметим также, что из-за вашего использования одиночных кавычек, вы проходили $results и $d1 дословно программы . вместо переменной содержимого Кроме того, я довольно уверен, что вы должны были бы запятые между аргументами с -ArgumentList вместо пробелов, так как это будет нормальный параметр PowerShell связывания поведение)

Есть куча других ошибок здесь:.

  1. Clear screen может быть просто clear, cls или Clear-Host. screen ничего не делает.
  2. $quantity = $results | measure, вероятно, должно быть $quantity = ($results | measure).Count или просто @($results).Count. В противном случае вы не получите результат, который вы хотите несколько строк позже.
+0

Спасибо, что очень много Джо. – Darkmalik88

+0

Кажется, что для каждого цикла объектов не заполняется переменная $ results. – Darkmalik88

+0

Как переписать $ results = @ (compare-object $ s1 $ d1) | Where-Object {$ _. Name -ne $ _. Name} Таким образом, он сравнивает имена файлов обоих каталогов и совпадений с именами. Только пропуски несогласованных имен файлов для ручного тормоза? – Darkmalik88