Передать вывод dir в качестве аргумента другой команде - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу присоединиться к .mp4 видео с помощью VLC.Следующая команда прекрасно работает при вводе в командной строке 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 (как Start-Process, так и &), но из-за нехватки опыта не смог разобраться ...

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Если вы используете 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
0 голосов
/ 27 декабря 2018

Ваш второй пример выглядит как смесь недопустимого пакета и недопустимого кода 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 
...