2017-02-13 8 views
-3

passiert, ich versuche, dieses Skript zu bekommen, ein Unterverzeichnis zu tun vergleichen auf Dateinamen basierte und dann nur Dateien, die 30 Tage oder jünger sind. Die Syntax scheint akzeptabel, aber die HandbrakeCLI-Codierung wird nicht gestartet.Powershell-Skript läuft aber nichts

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'" 
} 

Antwort

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

wäre ein guter Anfang sein zu suchen. Dies wird keine Ergebnisse zurück, wenn $_.Name ist NaN (was unwahrscheinlich ist).

Sobald Sie festgelegt, dass es eine Fehlermeldung, dass

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

nicht ausgeführt werden kann.

Beachten Sie, dass Sie Anführungszeichen um die gesamte Zeile zu verwenden, sagen effektiv Start-Process, dass das Ganze das Programm laufen soll. Was es nicht ist.

Es gibt keine Notwendigkeit für Start-Process hier sowieso, obwohl, sollten Sie in der Lage sein, nur auch, dass

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

(Hinweis verwenden, aufgrund Ihrer Verwendung von einfachen Anführungszeichen, wurden vorbei Sie $results und $d1 wörtlich in das Programm . anstelle der variablen Inhalte Außerdem bin ich ziemlich sicher, dass Sie Kommas zwischen Argumenten mit -ArgumentList statt Leerzeichen brauchen würde, wie das normale Powershell Parameter Bindungsverhalten wäre)

Es gibt eine Reihe von anderen Fehler hier:.

  1. Clear screen kann nur clear, cls oder Clear-Host. Die screen tut nichts.
  2. $quantity = $results | measure sollte wahrscheinlich $quantity = ($results | measure).Count oder einfach @($results).Count sein. Andernfalls erhalten Sie die gewünschte Ausgabe ein paar Zeilen später nicht.
+0

Vielen Dank Joey. – Darkmalik88

+0

Es scheint, die für jedes Objekt Schleife nicht die $ Ergebnisse Variable bevölkern. – Darkmalik88

+0

Wie schreibe ich $ results = @ (compare-object $ s1 $ d1) | Where-Object {$ _. Name -ne $ _. Name} So vergleicht es die Dateinamen von Verzeichnissen und ingnores Übereinstimmungen. Passiert nur nicht übereinstimmende Dateinamen zur Handbremse? – Darkmalik88

Verwandte Themen