При работе с Bash я могу поместить вывод одной команды в другую команду следующим образом:
my_command `echo Test`
было бы то же самое, что и
my_command Test
(Очевидно, это просто непрактичный пример.)
Мне просто интересно, можете ли вы сделать то же самое в пакетном режиме.
bash
batch-file
backticks
MiffTheFox
источник
источник
Ответы:
Вы можете сделать это, сначала перенаправив вывод в файл. Например:
источник
for /f
вариант намного лучше.%random%
Вы можете получить аналогичную функциональность, используя скрипты cmd.exe с
for /f
командой:Да, это вроде как неочевидно (мягко говоря), но это то, что есть.
Смотрите
for /?
кровавые подробности.Примечание: я думал, что для использования "
echo
" внутри обратных кавычек вfor /f
команде " " необходимо использовать "cmd.exe /c echo Test
", посколькуecho
это внутренняя командаcmd.exe
, но она работает более естественным образом. Пакетные скрипты Windows всегда меня чем-то удивляют (но обычно не в хорошем смысле).источник
system()
был в порядке, iirc, поскольку он в любом случае запускает оболочку, но .NETProcess.Start
должен явно вызывать оболочку. Что-то вроде этого, иирк. В любом случае, я считаю, что это лучший ответ, чем принятый :-)for
не навредят, а запутают проблему. А как насчет этого:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
важно. В противном случае, если результат команды включает пробелы, выводится только первое слово. Запустить в командной строке:for /f %a in ('"echo foo bar"') do echo "%a"
. Он будет напечатан"foo"
.Прочтите документацию по команде "for":
for /?
К сожалению, я не вошел в Windows, чтобы проверить это сам, но я думаю, что что-то вроде этого может примерно соответствовать тому, что вы хотите:
источник
Вы всегда можете запустить Bash внутри Windows. Я постоянно это делаю с помощью MSYS (намного эффективнее, чем Cygwin ).
источник
Возможно, я лажаю с синтаксисом стандартного
for /f
метода, но когда я добавляю очень сложную команду, включающую && и | в пределах обратных кавычекfor /f
, это вызывает проблемы. Возможна небольшая модификация по сравнению с обычными командами произвольной сложности:Поместив сначала полную и сложную команду в переменную, а затем поместив ссылку на переменную в предел, а не помещая сложную команду непосредственно в предел цикла for, вы можете избежать проблем интерпретации синтаксиса. В настоящее время, если я копирую точную команду, которую я установил для
VV
переменной в приведенном выше примере, туда, где она используется%VV%
, это вызывает синтаксические ошибки.источник