Объявление и использование переменной в пакетном файле 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 вроде переменных, содержащих = в их именах.

Другие вопросы по тегам