Как установить переменные среды с пробелами?
Мне нужно установить значения переменной среды, используя командный файл. Я написал сценарий для этого:
@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 имеет пробелы и двойные кавычки на каждом конце \""