2017-02-13 12 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の引数の間にコンマを置く必要があると確信しています。

ここに他の間違いがあります:

  1. Clear screenだけclearcls、またはClear-Hostことができます。 screenは何もしません。
  2. $quantity = $results | measureは、おそらく$quantity = ($results | measure).Countまたは単に@($results).Countである必要があります。そうしないと、数行後の出力が得られません。
+0

非常にジョーイありがとうございます。 – Darkmalik88

+0

各オブジェクトループが$ results変数に値を設定していないようです。 – Darkmalik88

+0

$ results = @(比較オブジェクト$ s1 $ d1)を書き直すにはどうすればいいですか? Where-Object {$ _。Name -ne $ _。Name}これは両方のディレクトリのファイル名を比較し、一致するものを比較します。ハンドブレーキにファイル名が一致しないパッセージだけ? – Darkmalik88

関連する問題