无效的语法,setx命令出错

32

我使用了setx命令来设置OGRE_HOME

setx OGRE_HOME D:\Program Files\OgreSDK

现在我需要更改OGRE_HOME的值。如何搜索我设置的所有值?如果我再次运行命令,它会显示:

现在我需要修改OGRE_HOME的值。如何搜索我已经设置的所有值?如果我再次运行该命令,则会显示:

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

不确定理解的话,可以使用“set”来查看所有值。 - Luc M
4个回答

35

你的Ogre SDK文件路径中有一个空格字符,它会被解释为分隔符并被认为是另一个参数。在你的路径前后添加 " 以使其作为单个参数传递给 setx:

setx OGRE_HOME "D:\Program Files\OgreSDK"

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

如果您设置了环境变量并且想立即查看其值,则可能需要打开新的命令提示符窗口。

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

set

要仅显示具有特定前缀的环境变量(例如,FOO 将显示 FOOBARFOOBAZ),请在 set 后加上该前缀:

set PREFIX

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

  • 右键单击计算机,选择属性
  • 在左侧窗格中单击高级系统设置
  • 确保您位于弹出对话框中的“高级”选项卡上
  • 在底部单击“环境变量…”

一个对话框将弹出,其中包含用户特定的环境变量以及系统范围内的环境变量。选择一个值并使用新建/编辑/删除按钮与它们交互。


非常感谢。我将永远不会在路径中安装带有空格字符的软件,因为这可能会引起一些难以检查的问题。 - Aaron Lee
请注意,如果您正在使用%PATH%(用于附加项),则还需要使用""。 - Andrew

4
命令提示符出现该错误是因为您忘记了引号。您应该输入以下内容:
setx OGRE_HOME "D:\Program Files\OgreSDK"

要查看已设置的所有值,请输入以下内容之一:

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

或者

reg query HKEY_CURRENT_USER\Environment

2

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\""

1
作为@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接