在foreach循环后运行启动过程

时间:2018-08-09 20:26:40

标签: powershell

  

这是我要开始工作的小脚本。它使用来自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

2 个答案:

答案 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