Powershell 脚本运行但没有任何反应
Powershell Script runs but nothing happens
我试图让这个脚本根据文件名进行子目录比较,然后只比较 30 天或更短的文件。语法似乎可以接受,但 HandbrakeCLI 编码未启动。
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'"
}
$results = @(compare-object $s1 $d1) | Where-Object {$_.Name -ne $_.Name}
将是一个不错的开始。这不会 return 任何结果,除非 $_.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 参数绑定行为。)
这里还有一堆其他的错误:
Clear screen
可以是 clear
、cls
或 Clear-Host
。 screen
什么都不做。
$quantity = $results | measure
可能应该是 $quantity = ($results | measure).Count
或者只是 @($results).Count
。否则你将无法在几行之后得到你想要的输出。
我试图让这个脚本根据文件名进行子目录比较,然后只比较 30 天或更短的文件。语法似乎可以接受,但 HandbrakeCLI 编码未启动。
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'"
}
$results = @(compare-object $s1 $d1) | Where-Object {$_.Name -ne $_.Name}
将是一个不错的开始。这不会 return 任何结果,除非 $_.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 参数绑定行为。)
这里还有一堆其他的错误:
Clear screen
可以是clear
、cls
或Clear-Host
。screen
什么都不做。$quantity = $results | measure
可能应该是$quantity = ($results | measure).Count
或者只是@($results).Count
。否则你将无法在几行之后得到你想要的输出。