Недопустимый синтаксис с setx
Я использовал команду setx
для установки OGRE_HOME
:
setx OGRE_HOME D:\Program Files\OgreSDK
Теперь мне нужно изменить значение OGRE_HOME
.
Как я могу выполнить поиск всех значений, которые я установил?
Если я снова запустил команду, это покажет, что:
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Ответы
Ответ 1
Ваш путь к SDK Ogre имеет в нем пробельный символ, который интерпретируется как разделитель для другого аргумента. Окружайте свой путь с помощью "
, чтобы сохранить его как один аргумент setx
:
setx OGRE_HOME "D:\Program Files\OgreSDK"
Чтобы увидеть текущее значение переменной среды OGRE_HOME
:
echo %OGRE_HOME%
Возможно, вам придется открыть новую оболочку командной строки, чтобы увидеть значение, если вы его установили, а затем попытаетесь сразу увидеть его значение.
Чтобы просмотреть все текущие заданные переменные среды, просто запустите:
set
Чтобы показать только переменные среды, которые имеют определенный префикс (поэтому FOO
будет показывать FOOBAR
и FOOBAZ
), поставьте этот префикс после set
:
set PREFIX
В качестве альтернативы вы можете использовать графический интерфейс для редактирования переменных среды (предполагая здесь Windows 7).
- Щелкните правой кнопкой мыши
Computer
, выберите Properties
- Нажмите
Advanced system settings
в левой панели
- Убедитесь, что вы находитесь на вкладке
Advanced
во всплывающем диалоговом окне
- Нажмите
Environment Variables...
внизу
Появится диалоговое окно с вашими переменными среды, специфичными для пользователя, а также переменными окружения всей системы. Выберите значение и используйте кнопки "Создать/Редактировать/Удалить", чтобы взаимодействовать с ними.
Ответ 2
Командная строка дает вам эту ошибку, потому что вы забыли кавычки. Вы должны ввести:
setx OGRE_HOME "D:\Program Files\OgreSDK"
Чтобы увидеть все значения, которые вы уже установили, введите либо:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
ИЛИ
reg query HKEY_CURRENT_USER\Environment
Ответ 3
setx и почти все команды командной строки Windows чувствительны к определенным специальным символам. Среди них пробел, но есть и цитата, которая используется для разграничения записи.
Как уже говорилось в @ajp15243, вы можете справиться с пространством, заблокировав путь между двумя цитатами. Но что, если у вас есть пути, и у этих путей уже есть цитаты, потому что они несут пробел? Вот пример:
MY_PATHS="c:\Program Files\path1";"c:\Program Files(x86)\Path2"
В этом случае вам придется помещать escape-символы для этих внутренних кавычек при использовании setx, иначе он будет запутан и даст указанную вами ошибку. Например:
setx -m MY_PATHS "\"c:\Program Files\path1\";\"c:\Program Files(x86)\Path2\""
Ответ 4
В качестве дополнения к @ajp15243 answer. Если вы делаете то же самое с PowerShell, а не с командной строкой или командным файлом, вам нужно вызвать SETX
с лидирующим символом двойной кавычки, как в:
$my_path = "%PROGRAMFILES%\MySQL\MySQL Server 5.7\bin\"
$hkcu_path = (Get-ItemProperty hkcu:\Environment).PATH + ";" + $my_path
SETX PATH "`"$hkcu_path" # note the leading escaped quote
Однако это может привести к добавлению двойной цитаты trailing в значение hkcu:\Environment\PATH
, поэтому вам также может понадобиться сделать это:
$dirty_path = (get-itemproperty hkcu:\Environment).PATH
$clean_path = $dirty_path -replace '"',''
SETX PATH $clean_path