Invalid syntax with setx

本秂侑毒 提交于 2019-11-30 17:20:20

Your path to the Ogre SDK has a space character in it, which is interpreted as a delimiter to another argument. Surround your path with " to keep it as one single argument to setx:

setx OGRE_HOME "D:\Program Files\OgreSDK"

To see the current value of the OGRE_HOME environment variable:

echo %OGRE_HOME%

You may have to open a new command prompt shell to see the value if you set it and are then trying to immediately see it's value.

To see all currently set environment variables, simply run:

set

To show only environment variables that have a certain prefix (so FOO would show FOOBAR and FOOBAZ), put that prefix after set:

set PREFIX

Alternatively, you can use the GUI to edit environment variables (assuming Windows 7 here).

  • Right-click Computer, choose Properties
  • Click Advanced system settings in the left pane
  • Make sure you're on the Advanced tab in the pop-up dialog
  • Click Environment Variables... at the bottom

A dialog will pop up with your user-specific environment variables as well as your system-wide environment variables. Select a value and use the New/Edit/Delete buttons to interact with them.

Command Prompt is giving you that error because you forgot the quotation marks. You should’ve typed:

setx OGRE_HOME “D:\Program Files\OgreSDK”

To see all the values you’ve already set, enter either:

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

OR

reg query HKEY_CURRENT_USER\Environment

setx and pretty much all windows command line commands are sensitive to certain special characters. Among them the space character but there's also the quote which is used to delimit an entry.

As @ajp15243 already said, you can deal with the space by locking off the path{s) between two quotations. But what if you have paths and those path already have quotations because they carry a space? Here's an example:

MY_PATHS="c:\Program Files\path1";"c:\Program Files(x86)\Path2"

In this case, you would have to put escape characters for those inner quotation marks when you use setx or it will get confused and give the error you listed. Eg:

setx -m MY_PATHS "\"c:\Program Files\path1\";\"c:\Program Files(x86)\Path2\""
    1

    As an addendum to @ajp15243's answer. If you are doing the same with PowerShell rather than the command prompt or batch file, you'll need to call SETX with a leading escaped double-quote character, as in:

    $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
    

    However doing so, may result in adding a trailing double quote in the value of hkcu:\Environment\PATH, so you may need to do this too:

    $dirty_path = (get-itemproperty hkcu:\Environment).PATH
    $clean_path = $dirty_path -replace '"',''
    SETX PATH $clean_path
    

      Your Answer

      By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

      Not the answer you're looking for? Browse other questions tagged or ask your own question.

      易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
      该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!