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

Pass dir output as argument to another command

我想使用 VLC 加入 .mp4 视频。当输入 Windows 命令提示符时,following command 运行良好:

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

第一行显然不是这样的。我尝试了一下这个命令,但是当文件名包含空格或(喘气!)感叹号时,事情很快就变得尴尬了。我也尝试过 PowerShell(Start-Process&),但由于缺乏经验无法弄清楚...

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

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

@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 

如果使用 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