Недопустимый синтаксис с 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