如何使用setx将内容添加到Windows PATH变量?遇到了一些奇怪的问题。

8 浏览
0 Comments

如何使用setx将内容添加到Windows PATH变量?遇到了一些奇怪的问题。

我想使用setx命令修改Windows的PATH变量。以下命令在Windows 8上至少50%的情况下有效:

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\

如果出现错误"the default argument can only be used 2 times",则以下命令在某些情况下有效:

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"

两者的区别在于第二个参数加了引号。我相信当%PATH%扩展包含空格时,引号是必需的。

然而,在Windows 7上我遇到了一些奇怪的问题。在一个特定的Windows 7机器上,我遇到了这个问题:

echo %PATH%

输出:

C:\Foo\;C:\Bar\;[...很多内容...]C:\Baz\

然后我执行以下命令:

setx PATH "%PATH%;C:\Quux\"

然后它显示"Error: Truncated at 1,024 characters." 现在我们来检查一下PATH的内容:

echo %PATH%

输出:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...很多内容,现在重复了...]C:\B

...而且被截断到了1,024个字符。它由于重复而超过了限制。还有趣的是:尽管setx产生了错误并且没有显示"Success",PATH的值仍然发生了改变。

我能够多次重复这种奇怪的行为(幸运的是我保存了PATH的原始内容)。

目前,我唯一确定的追加到PATH的方法如下:

  1. echo输出PATH的内容。
  2. 将PATH的内容复制到一个文本文件中,并手动在末尾添加;C:\Python27\;C:\Python27\Scripts\
  3. 将整个内容从文本文件中复制出来。
  4. setx PATH "<粘贴字符串>"

这个过程在Windows 7和Windows 8上每次都有效。

我真的应该能够用一条命令完成这个操作。我做错了什么?

0
0 Comments

问题的出现原因是使用setx命令向Windows的PATH变量中添加路径时遇到了奇怪的问题。解决方法是在PowerShell中以管理员身份运行以下命令:setx /M PATH "$Env:PATH;<要添加的路径>",然后在另一个PowerShell中使用$Env:PATH命令查看已添加的路径。

0
0 Comments

问题出现的原因:

使用setx命令向Windows PATH变量添加内容时出现了奇怪的问题。

解决方法:

1. 确保不会干扰系统范围的PATH变量。只有用户特定的部分会被读取、修改和写入到注册表中。

2. 第一条命令从注册表中获取用户特定的PATH部分,并将其存储到名为my_user_path的变量中。确保第一条命令没有错误。

3. 第二条命令将"C:\Python27;C:\Python27\Scripts;"添加到my_user_path的值的前面,并将其写回到用户特定的注册表键中。

4. 只有重新启动的程序才会看到PATH环境变量的更改。

如果在.bat文件中使用这些命令,请在第一行的两个位置都用"%%"替换"%":

for /f "usebackq tokens=2,*" %%A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%%B

其他回答中提到的内容:

- 在命令提示符中运行时,使用单个"%"。在批处理文件中运行时,将单个"%"替换为"%%"。

- 这是正确的答案,但没有得到更多的投票或被接受的原因可能是Stack Overflow(SO)没有考虑用户的反馈意见。读者应该能够将好的答案固定在顶部。

- 使用setx /?命令可以简化操作,因为它具有内置的读取注册表值的功能。

- 第二部分的解决方法可能会破坏用户的PATH。

希望以上整理对您有帮助。

0
0 Comments

问题原因:使用setx命令将路径添加到Windows的PATH变量时出现问题。主要原因是在使用setx命令的第二个参数中,当将系统的PATH和用户的PATH进行拼接时,会导致路径内容过长而被截断。

解决方法:以管理员身份运行cmd命令行窗口,然后使用以下命令:

setx /M PATH "%PATH%;<your-new-path>"

其中,/M选项将变量设置为系统范围。默认行为是设置为用户范围。

需要注意的是,使用/M选项需要管理员权限,因此需要以“以管理员身份运行”打开终端,否则setx命令将因为“访问注册表路径被拒绝”而失败。

另外,设置完新的路径后,如果立即使用echo命令查看PATH变量的值,是看不到新值的,需要关闭cmd窗口并重新打开。

如果想要查看注册表中实际存储的值,可以参考这个问题

需要注意的是,此解决方案是有问题的。执行上述命令会将Path的类型从REG_EXPAND_SZ更改为REG_SZ,并在此过程中删除其中存在的所有环境变量引用。

最后,还有一些反对使用该方法的意见。首先,此方法将用户的PATH变量追加到机器的PATH变量中,这可能会干扰其他用户,并且如果重复运行该命令,路径的长度将不断增加,直到最终溢出。其次,如果之前已经通过在前面添加更多目录来更改了PATH,那么使用setx命令会导致原始PATH内容的大部分丢失。

因此,不建议使用此方法。

0