如何在PowerShell中实现cmd遍历MP4文件执行DVR-Scan命令的等效操作?
PowerShell中等效CMD批量处理MP4文件的正确实现
原CMD命令作用:遍历当前目录下所有.mp4文件,调用dvr-scan.exe提取事件片段到events/目录,并添加时间戳:
for %f in (*.mp4) do "C:\Program Files\DVR-Scan\dvr-scan.exe" -i %f -d events/ -tc
你之前的写法存在以下问题:
- 写法1:缺少PowerShell的调用操作符
&,带空格的可执行文件路径会被当成字符串,无法触发程序执行 - 写法2:仅输出拼接后的命令字符串,没有实际调用程序
- 写法3:同样错误地将命令作为字符串处理,未正确调用可执行文件
正确实现方式
以下两种写法都可以实现等效功能,推荐第一种(更贴近原CMD的执行逻辑):
方法1:使用调用操作符&直接执行
Get-ChildItem -Filter *.mp4 -File | ForEach-Object { & "C:\Program Files\DVR-Scan\dvr-scan.exe" -i $_.FullName -d events/ -tc }
-Filter *.mp4:限定只处理MP4文件,和原CMD的*.mp4匹配&:PowerShell中用来执行路径包含空格的可执行文件的调用操作符$_.FullName:获取当前文件的完整路径,对应CMD中的%f
方法2:使用Start-Process(适合需要控制窗口或执行方式的场景)
如果需要同步执行(等待当前文件处理完再执行下一个),可以添加-Wait和-NoNewWindow参数:
Get-ChildItem -Filter *.mp4 -File | ForEach-Object { Start-Process -FilePath "C:\Program Files\DVR-Scan\dvr-scan.exe" ` -ArgumentList "-i `"$($_.FullName)`" -d events/ -tc" ` -Wait -NoNewWindow }
内容的提问来源于stack exchange,提问作者traveh
相关产品推荐
相关产品推荐

