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