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

392

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

@echo off

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

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

We're working with ""

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

Теги:
batch-file
cmd
variables

4 ответа

506
Лучший ответ

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

  • 5
    Если пробел перед = интерпретируется как часть имени, тогда на переменную нельзя ссылаться как %location% , на нее следует ссылаться как %location % . Это опечатка?
  • 6
    Переменная @Miserable: Вы правы; кажется, оригинальный ответ стал жертвой неправильного редактирования.
Показать ещё 3 комментария
235

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

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

set location="bob"

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

set location=bob

Или еще лучше

set "location=bob"

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

  • 6
    Есть ли минусы для последнего синтаксиса?
  • 5
    @ Волк - Нет, недостатков нет. Тем не менее, есть предел тому, когда это наиболее эффективно. Пока значение не содержит кавычек, в нем могут появляться практически любые символы, не беспокоясь о экранировании. Исключения составляют % , а возможно и ! если отложенное расширение включено. Но если значение содержит кавычки, вам следует задуматься о том, когда экранировать такие символы, как | & т. д.
Показать ещё 1 комментарий
5

ввод location.bat

@echo off
cls

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

Выход

We're working with bob

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

  • 3
    Что такое /p ???
  • 2
    set /p запрашивает пользователя и сохраняет ответ в указанной переменной. например, set /p name="What is your name? " & echo Hello, %name%.
Показать ещё 1 комментарий
0
 @ECHO OFF

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

Пожалуйста, удалите "" это с двух сторон переменной. Это будет работать нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню