这是我要开始工作的小脚本。它使用来自cli的手刹来转换avi。之后,我尝试使用7zip cli压缩文件,因此无法使用7zip powershell软件包。如果我运行整个脚本,它将进入zip部分,并且会出错。我尝试将其作为cmd运行并启动进程。就像没有完成foreach并仅运行下一个命令一样。如果我自己运行该命令和已转换的文件,则该命令有效。我在这里想念什么?
$date = Get-Date -Format yyyy-MM-dd
$filelist = Get-ChildItem C:\dan\VideoConvert\*.avi
$i = 0
ForEach ($file in $filelist)
{
$i++
$oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension;
$newfile = $file.DirectoryName + "\converted$i.mp4";
Start-Process "C:\dan\VideoConvert\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -o `"$newfile`"" -Wait
}
& "c:\dan\VideoConvert\7z.exe" a -t7z "$date" *.mp4
#Start-Process "c:\dan\VideoConvert\7z.exe" -ArgumentList "a -t7z $date.7z *.mp4 -p"
#Copy-Item c:\dan\VideoConvert\$date.7z \\ssb.local\shares\temp
#Remove-Item c:\dan\VideoConvert\$date.7z
答案 0 :(得分:1)
在Start-process命令中,尝试包含-wait选项,以等待zip操作完成,然后再处理其输出。
提示:使用7z.exe开关 -mx0 (完全不压缩),这将提高您的速度,因为它不会尝试进一步压缩已压缩的mp4格式。
答案 1 :(得分:0)
我能够借助Roberts注释并使用-mx = 0标志来解决这个问题。谢谢!这是工作副本。
$date = Get-Date -Format yyyy-MM-dd
$filelist = Get-ChildItem C:\dan\VideoConvert\*.avi
$pass = Read-Host -Prompt 'Enter Password for archive: '
$i = 0
function CopyDelete ()
{
Copy-Item c:\dan\VideoConvert\"$date.7z" \\ssb.local\shares\temp
Remove-Item c:\dan\VideoConvert\*.7z
Remove-Item c:\dan\VideoConvert\*.mp4
}
function Process7z ()
{
Start-Process "c:\dan\VideoConvert\7z.exe" -ArgumentList "a -t7z -mx=0 C:\dan\VideoConvert\$date.7z c:\dan\VideoConvert\*.mp4 -p$pass" -wait
}
function ProcessVideo ()
{
ForEach ($file in $filelist)
{
$i++
$oldfile = $file.DirectoryName + "\" + $file.BaseName + $file.Extension;
$newfile = $file.DirectoryName + "\converted$i.mp4";
Start-Process "C:\dan\VideoConvert\HandBrakeCLI.exe" -ArgumentList "-i `"$oldfile`" -o `"$newfile`"" -Wait -NoNewWindow
}
}
ProcessVideo
Process7z
CopyDelete