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


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"

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


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". Но даже тогда это больше не соответствует вопросу
Джеб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.