Пакетный эквивалент Bash backticks

При работе с Bash я могу поместить вывод одной команды в другую команду следующим образом:

my_command `echo Test`

будет таким же, как

my_command Test

(Очевидно, это просто практический пример.)

Мне просто интересно, можете ли вы сделать то же самое в пакете.

Ответ 1

Вы можете сделать это, сначала перенаправляя вывод в файл. Например:

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%

Ответ 2

Вы можете получить аналогичную функциональность, используя скрипты cmd.exe с помощью команды for /f:

for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a

Да, это как бы неочевидно (по меньшей мере), но это то, что там.

См. for /? для деталей gory.

Sidenote: я думал, что использовать "echo" внутри обратных шагов в команде "for /f" нужно будет, используя "cmd.exe /c echo Test", поскольку echo является внутренней командой cmd.exe, но он работает более естественным образом. Пакетные скрипты Windows всегда удивляют меня каким-то образом (но обычно не так хорошо).

Ответ 3

Прочитайте документацию для команды "для": for /?

К сожалению, я не зашел в Windows, чтобы проверить его сам, но я думаю, что что-то вроде этого может приблизиться к тому, что вы хотите:

for /F %i in ('echo Test') do my_command %i

Ответ 4

Возможно, я надуваю синтаксис стандартного метода for /f, но когда я ввел очень сложную команду с участием && и | в пределах backticks в пределе 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%, она вызывает синтаксические ошибки.

Ответ 5

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