将dir输出作为参数传递给另一个命令

时间:2018-12-27 12:26:20

标签: powershell batch-file vlc

我想使用VLC加入.mp4视频。将following command输入Windows命令提示符后,效果很好:

vlc input_1.mp4 input_2.mp4 --sout "#gather:std{access=file,dst=output.mp4}" --sout-keep

我想对此一概而论,这样就不必手动调整输入文件列表了。我希望当前目录中的所有mp4文件都按字母顺序排列。理想情况是这样的:

files = dir *.mp4 -b -o:n
vlc %files% --sout "#gather:std{access=file,dst=output.mp4}" --sout-keep

第一行显然不能那样工作。我使用了该命令,但当文件名包含空格或(gasp!)感叹号时,事情很快变得尴尬。我还尝试了PowerShell(Start-Process&),但是由于经验不足,无法解决...

2 个答案:

答案 0 :(得分:2)

如果使用powershell生成该cmd命令,请尝试以下选项

从powershell执行:

cmd /c "vlc $((dir *.mp4).Name -join ' ') --sout ""#gather:std{access=file,dst=output.mp4}"" --sout-keep"

从cmd执行:

powershell -c "echo ""vlc $((dir *.mp4).Name -join ' ') --sout ""#gather:std{access=file,dst=output.mp4}"" --sout-keep""" | cmd

答案 1 :(得分:1)

第二个示例看起来像是无效批处理和无效Powershell代码的混合体。

在批处理文件中可以这样做:
(只要文件字符串的长度不超过最大cmd行长)

@Echo off & Setlocal EnableDelayedExpansion
set "files="
for /f "delims=" %%A in ('Dir /B /ON *.mp4') Do Set "files=!files! "%%A""
vlc %files% --sout "#gather:std{access=file,dst=output.mp4}" --sout-keep