Ответ 1
Чтобы сделать то, что описывает Джесси из командного файла, вам нужно написать
for /f "delims=" %%a in ('ver') do @set foobar=%%a
Но я предлагаю использовать Cygwin в вашей системе Windows, если вы привыкли к сценарию типа unix.
В среде bash я обычно делаю:
var=$(command -args)
а я использую $var
со значением, заданным в результате команды.
То же самое относится к более традиционным
set var=`command -args`
совместим почти в каждой оболочке unix.
Как я могу определить переменную в файле bat bat Windows? Я пробовал
set var=command -args
но я получаю только строку "command -args".
Чтобы сделать то, что описывает Джесси из командного файла, вам нужно написать
for /f "delims=" %%a in ('ver') do @set foobar=%%a
Но я предлагаю использовать Cygwin в вашей системе Windows, если вы привыкли к сценарию типа unix.
Нужно быть несколько осторожным, так как командная команда Windows:
for /f "delims=" %%a in ('command') do @set theValue=%%a
не имеет той же семантики, что и инструкция оболочки Unix:
theValue=`command`
Рассмотрим случай, когда команда выходит из строя, вызывая ошибку.
В версии оболочки Unix все еще выполняется присвоение "theValue", причем любое предыдущее значение заменяется пустым значением.
В пакетной версии Windows это команда "для", которая обрабатывает ошибку, а предложение "do" никогда не достигается - поэтому сохраняется любое предыдущее значение "theValue".
Чтобы получить больше Unix-подобной семантики в пакете Windows script, вы должны убедиться, что присвоение имеет место:
set theValue=
for /f "delims=" %%a in ('command') do @set theValue=%%a
Невозможность очистить значение переменной при преобразовании пакета Unix script в Windows может быть причиной незначительных ошибок.
Здесь, как я это делаю, когда мне нужен запрос базы данных, получается в моем командном файле:
sqlplus -S schema/[email protected] @query.sql> __query.tmp
set /p result=<__query.tmp
del __query.tmp
Ключ находится в строке 2: "set/p" устанавливает значение "результат" в значение первой строки (только) в "__query.tmp" через "<" перенаправления.
Единственный способ, которым я это видел, - это сделать это:
for /f "delims=" %a in ('ver') do @set foobar=%a
ver - это команда версии для Windows и в моей системе она производит:
Microsoft Windows [Version 6.0.6001]