Определение и использование переменной в командном файле

451

Я пытаюсь определить и использовать переменную в командном файле. Похоже, все должно быть просто:

@echo off

set location = "bob"
echo We're working with "%location%"

Вывод, который я получаю, следующий:

We're working with ""

Что тут происходит? Почему моя переменная не отображается?

Джейми Диксон
источник

Ответы:

552

Пробел перед =символом интерпретируется как часть имени, а пробел после него (как и кавычки) интерпретируется как часть значения. Поэтому на созданную вами переменную можно ссылаться %location %. Если это не то, что вы хотите, удалите лишние пробелы в определении.

Брайан Никсон
источник
7
Если пространство перед =интерпретируется как часть имени, тогда на переменную нельзя ссылаться как %location%, на нее нужно ссылаться как %location %. Это опечатка?
Мизерная переменная
7
Переменная @Miserable: Вы правы; кажется, оригинальный ответ стал жертвой неправильного редактирования.
Брайан Никсон
18
Так вот с чем пришла MS
Falaque
5
@Falaque В отличие от alias x = y* nix земли?
Базовый
1
@Falaque, что, по вашему мнению, сделает bash при запуске x = y?
phuclv
264

Пространства являются значительными. Вы создали переменную с именем 'location ' со значением
' "bob"'. Примечание. Вложенные одинарные кавычки были добавлены для отображения местоположения.

Если вы хотите кавычки в вашем значении, то ваш код должен выглядеть так

set location="bob"

Если вы не хотите кавычки, то ваш код должен выглядеть так

set location=bob

Или еще лучше

set "location=bob"

Последний синтаксис предотвращает случайное попадание конечных пробелов в значение, а также защищает от специальных символов, таких как & |и т. Д.

dbenham
источник
8
Есть ли минусы для последнего синтаксиса?
Волк
8
@ Волк - Нет, недостатков нет. Однако есть предел тому, когда это наиболее эффективно. Пока значение не содержит кавычек, в нем могут появляться практически любые символы, не беспокоясь о экранировании. Исключения есть %, и, возможно, !если включено отложенное расширение. Но если значение действительно содержит кавычки, то вы должны беспокоиться о том, когда , чтобы избежать отравленных символы , такие как |, &и т.д.
dbenham
1
это похоже на установку переменной среды в windows. Это единственный способ использования локальных переменных в пакетных скриптах?
парасриня
1
@ Wolf, вам нужно только убедиться, что расширения команд включены, но в любом случае это конфигурация по умолчанию ...
aschipfl
8

вход location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

вывод

We're working with bob

(ошибки вы сделали: spaceи " ")

Филипп
источник
4
set /pзапрашивает пользователя и сохраняет ответ в указанной переменной. напр.,set /p name="What is your name? " & echo Hello, %name%.
Роберт Муни
6
-1, синтаксис set /p "varname"="text"неправильный, он создает переменную с именем location"(с завершающей кавычкой!). Так и должно быть set /p location="bob". Но даже тогда это больше не соответствует вопросу
Джеб