无效的语法与setx

我用setx命令来设置OGRE_HOME

 setx OGRE_HOME D:\Program Files\OgreSDK 

现在我需要更改为OGRE_HOME值。 如何search我设定的所有值? 如果我再次运行该命令,则显示:

 ERROR: Invalid syntax. Default option is not allowed more than '2' time(s). 

你的Ogre SDK的路径中有一个空格字符,它被解释为另一个参数的分隔符。 围绕你的道路"保持它作为一个单一的参数setx

 setx OGRE_HOME "D:\Program Files\OgreSDK" 

要查看OGRE_HOME环境变量的当前值:

 echo %OGRE_HOME% 

您可能必须打开一个新的命令提示符shell才能看到该值,如果您设置它,然后尝试立即看到它的值。

要查看当前设置的所有环境变量,只需运行:

 set 

要仅显示具有特定前缀的环境变量(因此FOO会显示FOOBARFOOBAZ ),请在set后放置该前缀:

 set PREFIX 

或者,您可以使用GUI来编辑环境变量(假设Windows 7在这里)。

  • 用鼠标右键单击Computer ,选择Properties
  • 点击左侧窗格中的Advanced system settings
  • 确保您位于弹出式对话框的“ Advanced选项卡中
  • 点击底部的Environment Variables...

一个对话框将弹出用户特定的环境变量以及系统范围的环境变量。 选择一个值并使用New / Edit / Delete按钮与它们交互。

命令提示符给你,因为你忘记了引号的错误。 你应该输入:

 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" 

在这种情况下,当你使用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