2017-02-13 152 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} 

將是一個良好的開端看。這將不會返回任何結果,除非$_.NameNaN(這不太可能)。

一旦固定,應該有一條錯誤消息,

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可以只是clearcls,或Clear-Hostscreen什麼都不做。
  2. $quantity = $results | measure應該可能是$quantity = ($results | measure).Count或簡單地@($results).Count。否則,你將不會在幾行後得到你想要的輸出。
+0

非常感謝你Joey。 – Darkmalik88

+0

看來每個對象循環都沒有填充$ results變量。 – Darkmalik88

+0

如何重寫$ results = @(compare-object $ s1 $ d1)| Where-Object {$ _。Name -ne $ _。Name}因此,它比較了兩個目錄和ingnores匹配的文件名。只有將不匹配的文件名傳遞給手剎? – Darkmalik88

相關問題