Как установить переменные среды с пробелами?

Мне нужно установить значения переменной среды, используя командный файл. Я написал сценарий для этого:

@echo off
set value="Hello world"
setx -M srijani "%srijani%;%value%"

Это дает ошибку:

ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.

Я гуглил и обнаружил, что при использовании пробелов нам нужно писать это в двойных кавычках.

set value="Hello world"

Но это тоже не работает.

Примечание: я нахожусь на Windows 7.

2 ответа

Решение

Ошибка, выводимая командой setx, вызвана неправильным использованием кавычек при назначении строки переменной value,

Команда установлена, а параметр variable=value, Что касается большинства команд и приложений, то возможно и часто требуется заключать параметр в двойные кавычки, если он содержит 1 или более пробелов или любой другой символ из этого списка: &()[]{}^=;!'+,`~, Эти символы отображаются на последней странице справки при запуске в окне командной строки cmd /? или же help cmd,

Но здесь не так:

set value="Hello world"

С первой двойной кавычкой после знака равенства весь параметр variable=value набора команд не заключено в двойные кавычки.

Это приводит к интерпретации двойных кавычек как части строки для присвоения переменной с именем value, Все от знака равенства до конца строки, включая двойные кавычки и, возможно, существующие конечные пробелы и горизонтальные табуляции, присваивается здесь переменной value вместо только строки Hello world как и ожидалось.

На расширение линии

setx -M srijani "%srijani%;%value%"

поэтому результат:

setx -M srijani "Value of variable srijani;"Hello world""

И команда setx интерпретирует неверный параметр в кавычках как синтаксическую ошибку.

Правильно будет использовать:

set "value=Hello world"

Теперь весь параметр набора команд заключен в двойные кавычки. Поэтому при разборе строки игнорируются:

  • все пробелы / табуляции между набором команд и первой двойной кавычкой,
  • первая двойная кавычка,
  • последняя двойная кавычка,
  • и все, возможно, существующие пробелы / табуляции после последней двойной кавычки.

Так просто Hello world присваивается переменной с именем value,

Подробнее о правильном назначении строки переменной среды читайте в разделе " Почему не выводится строка с" echo %var% "после использования" set var = text "в командной строке? Он также содержит простой демонстрационный пакетный код.

Еще немного информации:

Как интерпретируется строка аргумента, содержащая 1 или более кавычек где-то посередине, зависит от команды или приложения. Поведение при интерпретации аргумента с 1 или более " Строка аргумента может варьироваться в зависимости от используемого компилятора, как объяснено в ответе на командный файл: перечислить rar-файл в определенную папку и записать результат в текстовый файл и, конечно, исходный код команды / приложения.

Для большинства команд и приложений правильный синтаксис:

command "parameter in quotes"
"Path to application\app.exe" "parameter in quotes" 

Но есть приложения, которым требуются кавычки в середине строки аргумента. Примером такого приложения является Windows Explorer.

Следующий синтаксис необходим для открытия окна Проводника из пакетного файла с текущим каталогом, отображаемым в окне.

explorer.exe /e,"%CD%"

Не работают:

explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"

Так explorer.exe требует, чтобы открываемый каталог был указан после /e, с кавычками в середине строки параметра или интерпретирует "/e,%CD%" соответственно "/e %CD%" как имя каталога с путем для отображения в окне проводника.

Смотрите также Параметры командной строки Windows Explorer:

  • KB130510 (Windows 95, Windows 98, Windows Millennium, Windows NT 4.0)
  • KB152457 (Windows NT 4.0, Windows 2000)
  • KB314853 (Windows XP)

Параметры командной строки Windows Explorer, описанные в этих статьях поддержки Microsoft и являющиеся одинаковыми во всех трех статьях, также подходят для Explorer в Windows Server 2003, Windows Vista, Windows Server 2008 R2, Windows 7, Windows Server 2012 R2, Windows 8.0, Windows 8.1, Windows 10, другими словами для всех 32-битных и 64-битных Windows.

setx foo "\" этот env var имеет пробелы и двойные кавычки на каждом конце \""

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