Пакетный эквивалент уколов Bash - PullRequest
86 голосов
/ 05 мая 2010

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

my_command `echo Test`

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

my_command Test

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

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

Ответы [ 5 ]

96 голосов
/ 05 мая 2010

Вы можете получить аналогичную функциональность, используя сценарии 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 всегда меня как-то удивляют (но обычно не в хорошем смысле).

54 голосов
/ 05 мая 2010

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

echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
27 голосов
/ 05 мая 2010

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

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

for /F %i in ('echo Test') do my_command %i
3 голосов
/ 29 января 2014

Возможно, я искажаю синтаксис стандартного метода 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%, это вызовет синтаксические ошибки.

3 голосов
/ 05 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...