Пакетный эквивалент уколов Bash
При работе с Bash я могу поместить вывод одной команды в другую команду следующим образом:
my_command `echo Test`
будет то же самое, что и
my_command Test
(Очевидно, это просто непрактичный пример.)
Мне просто интересно, если вы можете сделать то же самое в пакетном режиме.
5 ответов
Вы можете сделать это, перенаправив вывод в файл первым. Например:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
Вы можете получить аналогичную функциональность, используя сценарии cmd.exe с for /f
команда:
for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a
Да, это вроде не очевидно (по меньшей мере), но это то, что есть.
Увидеть for /?
для кровавых деталей.
Sidenote: я думал, что использоватьecho
"внутри задних ходов в"for /f
"Команда должна быть выполнена с помощью"cmd.exe /c echo Test
" поскольку echo
это внутренняя команда cmd.exe
, но это работает более естественным образом. Пакетные скрипты Windows всегда меня как-то удивляют (но обычно не в хорошем смысле).
Прочитайте документацию по команде "for": for /?
К сожалению, я не вошел в Windows, чтобы проверить это сам, но я думаю, что-то вроде этого может приблизиться к тому, что вы хотите:
for /F %i in ('echo Test') do my_command %i
Может я облажаюсь синтаксисом стандарта for /f
метод, но когда я поставил очень сложную команду с участием && и | в тылу в пределе for /f
, это вызывает проблемы. Небольшая модификация от обычной возможна для обработки произвольной команды сложности:
SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a
Поместив сначала полную и сложную команду в переменную, а затем поместив ссылку на переменную в пределе вместо того, чтобы помещать сложную команду непосредственно в предел цикла for, вы можете избежать проблем интерпретации синтаксиса. В настоящее время, если я скопирую точную команду, которую я установил в VV
переменная в примере выше, где он используется, %VV%
, это вызывает синтаксические ошибки.