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

Powershell 将dir输出作为参数传递给另一个命令,powershell,batch-file,vlc,Powershell,Batch File,Vlc,我想加入使用VLC的.mp4视频。当输入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 "#gathe

我想加入使用VLC的.mp4视频。当输入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

第一行显然不是这样工作的。我使用了一点命令,但当文件名包含空格或感叹号时,事情很快就会变得棘手。我也尝试过PowerShell(包括
启动流程
&
),但由于缺乏经验,无法解决问题…

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

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


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

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


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

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