Недопустимый синтаксис с setx
я использовал установить OGRE_HOME
:
setx OGRE_HOME D:Program FilesOgreSDK
теперь мне нужно изменить значение OGRE_HOME
.
Как я могу искать все значения, которые я установил?
Если я снова запускаю команду, она показывает, что:
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
4 ответов
ваш путь к Ogre SDK имеет в нем пробел, который интерпретируется как разделитель другого аргумента. Окружите свой путь "
чтобы сохранить его как один единственный аргумент setx
:
setx OGRE_HOME "D:\Program Files\OgreSDK"
чтобы увидеть текущее значение OGRE_HOME
переменные среды:
echo %OGRE_HOME%
возможно, вам придется открыть новую оболочку командной строки, чтобы увидеть значение, если вы установите его, а затем попытаетесь сразу увидеть его значение.
посмотреть текущие переменные среды, просто запустите:
set
чтобы показать только переменные среды, которые имеют определенный префикс (so FOO
покажет FOOBAR
и FOOBAZ
), поставьте этот префикс после set
:
set PREFIX
кроме того, вы можете использовать GUI для редактирования переменных среды (при условии, что Windows 7 здесь).
- щелкните правой кнопкой мыши
Computer
выберитеProperties
- клик
Advanced system settings
в левой панели - убедитесь, что вы на
Advanced
вкладка во всплывающем диалоговом окне - клик
Environment Variables...
в самом низу
появится диалоговое окно с вашими пользовательскими переменными среды, а также вашими системными переменными среды. Выберите значение и используйте кнопки Создать/изменить/удалить для взаимодействия с ними.
Командная строка дает вам эту ошибку, потому что вы забыли кавычки. Надо было набрать:
setx OGRE_HOME “D:\Program Files\OgreSDK”
чтобы увидеть все значения, которые вы уже настроили, введите:
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
или
reg query HKEY_CURRENT_USER\Environment
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\""
В качестве дополнения к @ajp15243 это. Если вы делаете то же самое с 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
однако это может привести к добавлению трейлинг двойная кавычка в значении hkcu:\Environment\PATH
, Так что вам, возможно, придется сделать это тоже:
$dirty_path = (get-itemproperty hkcu:\Environment).PATH
$clean_path = $dirty_path -replace '"',''
SETX PATH $clean_path