Объявление и использование переменной в пакетном файле Windows (.BAT)
Я пытаюсь объявить и использовать переменную в моем командном файле. Похоже, все должно быть просто.
@ECHO OFF
SET location = "bob"
ECHO We're working with "%location%"
Я получаю вывод:
We're working with ""
Что тут происходит? Почему моя переменная не отображается?
3 ответа
Пространство перед =
интерпретируется как часть имени, а пробел после него (как и кавычки) интерпретируется как часть значения. Таким образом, на созданную вами переменную можно ссылаться с помощью %location %
, Если это не то, что вы хотите, удалите лишние пробелы в определении.
Пространства являются значительными. Вы создали переменную с именем (добавлены заключающие одинарные кавычки, чтобы показать расположение пространства) 'location '
со значением ' "bob"'
,
Если вы хотите кавычки в вашем значении, то ваш код должен выглядеть так
set location="bob"
Если вы не хотите кавычек, то ваш код должен выглядеть так
set location=bob
Или еще лучше
set "location=bob"
Последний синтаксис предотвращает попадание значения в случайные пробелы, а также защищает от специальных символов, таких как & | и т.п.
Вход location.bat
@echo off
cls
set /p "location"="bob"
echo We're working with %location%
pause
выход
We're working with bob
(ошибки вы сделали: space
а также " "
)
Также подумайте об использовании SETX
- он установит переменную на уровне пользователя или компьютера (доступен для всех пользователей), хотя переменная будет использоваться при следующем открытии cmd.exe, поэтому часто ее можно использовать вместе с
SET
:
::setting variable for the current user
if not defined My_Var (
set "My_Var=My_Value"
setx My_Var My_Value
)
::setting machine defined variable
if not defined Global_Var (
set "Global_Var=Global_Value"
SetX Global_Var Global_Value /m
)
Вы также можете напрямую редактировать значения реестра:
Пользовательские переменные: HKEY_CURRENT_USER\Environment
Системные переменные: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Что позволит избежать некоторых ограничений SET и SETX вроде переменных, содержащих
=
в их именах.