2012-05-11 3 views
304

Я пытаюсь объявить и использовать переменную в своем командном файле. Похоже, это должно быть просто.Объявление и использование переменной в пакетном файле Windows (.BAT)

@ECHO OFF 

SET location = "bob" 
ECHO We're working with "%location%" 

Выход я получаю:

We're working with "" 

Что здесь происходит? Почему моя переменная не эхо?

ответ

398

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

+0

Благодаря Брайан. Задача решена. –

+5

Если пробел перед '=' интерпретируется как часть имени, то переменная * не может * быть указана как '% location%', она должна быть указана как '% location%'. Это опечатка? –

+6

@Miserable Variable: Вы правы; кажется, что первоначальный ответ стал жертвой неправильного редактирования. –

188

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

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

set location="bob" 

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

set location=bob 

или еще лучше

set "location=bob" 

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

+2

Есть ли недостатки для последнего синтаксиса? – Wolf

+1

@ Вольф - Нет, нет недостатка. Тем не менее, существует предел, когда он наиболее эффективен. Пока значение не содержит кавычек, тогда почти любые символы могут появляться в значении, не беспокоясь об экранировании. Исключения составляют '%' и, возможно, '!', Если включено замедленное расширение. Но если значение содержит кавычки, тогда вы должны беспокоиться о том, когда избегать ядовитых символов, таких как '|', '&' и т. Д. – dbenham

+1

это похоже на настройку переменной среды в окнах. Является ли это единственным способом использования локальных переменных в пакетных сценариях? – parasrish

4

вход location.bat

@echo off 
cls 

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

выход

We're working with bob 

(ошибки у сделано: space и " ")