-3

I'm trying to get this script to do a subdirectory compare based on filename and then only files that are 30 days or younger. The Syntax seems to acceptable but the HandbrakeCLI encoding doesn't launch.

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

1 回答 1

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。否则你不会在几行之后得到你想要的输出。
于 2017-02-13T16:58:47.120 回答