Мне нужно назначить вывод программы для переменной с помощью командного файла MS.
Так что в оболочке GNU Bash я бы использовал VAR=$(application arg0 arg1)
. Мне нужно подобное поведение в Windows, используя командный файл.
Нечто подобное set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
источник
источник
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
В дополнение к этому предыдущему ответу , внутри оператора for могут использоваться каналы, экранированные символом каретки:
источник
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
но в общем случаеusebackq
ее следует использовать для обработки сложных команд.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Мне проще, если в самой команде нет кавычек.@OP, вы можете использовать циклы for для получения статуса возврата вашей программы, если она выводит что-то отличное от чисел
источник
предполагая, что вывод вашего приложения представляет собой числовой код возврата, вы можете сделать следующее
источник
При выполнении:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
я получаю ошибку: %% я был неожиданным в это время. Как исправить, я должен был выполнить выше, какfor /f %i in ('application arg0 arg1') do set VAR=%i
источник
%%
и вне командного файла в командной строке вам нужно%
В дополнение к ответу вы не можете напрямую использовать операторы перенаправления вывода в заданной части
for
цикла (например, если вы хотите скрыть вывод stderror от пользователя и предоставить более приятное сообщение об ошибке). Вместо этого вы должны избегать их с помощью символа вставки (^
):Ссылка: перенаправить вывод команды в цикл for batch script
источник
источник
Вы можете использовать пакетный макрос для простого захвата выходных данных команды, немного похожий на поведение оболочки bash.
Использование макроса просто и выглядит
И это работает даже с трубами
Макрос использует переменную как массив и сохраняет каждую строку в отдельном индексе.
В примере
%$set% allDrives="wmic logicaldisk
будут созданы следующие переменные:Чтобы использовать его, не важно понимать, как работает сам макрос.
Полный пример
источник
Я написал скрипт, который пингует google.com каждые 5 секунд и регистрирует результаты с текущим временем. Здесь вы можете найти выходные данные для переменных "commandLineStr" (с индексами)
источник