Пакетный эквивалент уколов 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%, это вызывает синтаксические ошибки.

Вы всегда можете запустить Bash внутри Windows. Я делаю это все время с MSYS (гораздо эффективнее, чем Cygwin).

Другие вопросы по тегам