4

我正在尝试更新 win32 shell 脚本中的系统路径变量,但前提是值不存在。

我当前的版本看起来像这样:

for %%f in (xyz.exe) DO if [%%~$PATH:f]==[]; setx Path "%PATH%;%GRADLE_HOME%\bin" -m

我遇到的问题是

setx Path "%PATH%;%GRADLE_HOME%\bin"  

这不起作用,但是如果我将引号更改为单引号

setx Path '%PATH%;%GRADLE_HOME%\bin'

它确实有效,但路径在第一次出现 Program Files 时结束。即 abc;def;程序

有什么办法可以克服这个吗?

4

7 回答 7

8

实际上有一种更简单的方法..它似乎有效,但有点丑陋且不直观:

setx /M Path "%PATH%;%GRADLE_HOME%\bin

请注意,只有一个双引号,它在开头.. 如果你把一个放在末尾,它会在路径字符串中结束(开头没有那个)。

于 2015-02-04T22:41:51.217 回答
2

我有点晚了,但我正在寻找类似的东西但找不到它,所以我自己想通了。我试图设置变量以从命令行启动 VSC#,并且 VSC# 的 exe 文件存在于包含与您的情况类似的空间的路径中。所以我的解决方案是使用以下设置变量:

setx vcs "\"E:\Program Files\IDE\vcsexpress.exe\"
于 2016-07-30T23:22:46.010 回答
1

Single quotes never work in Windows. Period.

Your code does work for me with the double quotes, actually.

于 2012-06-13T08:49:12.653 回答
1

我发现了这个问题,因为我正在寻找一些不同的东西。我需要在我设置的东西中加上引号。这并不是 OP 所要求的,但如果问题是嵌入引号,则可能与此相关。

setx SVN_EDITOR C:\Program Files\vim\vim74\vim.exe

我发现这虽然“正确”但不起作用,因为该变量的用户被路径中的空格绊倒了,所以我需要在其中加上引号。

我找到

set SVN_EDITOR="C:\Program Files\vim\vim74\vim.exe"

工作得很好,所以我想我会尝试在 Windows 上转义引号的正常方式:

setx SVN_EDITOR "^"C:\Program Files\vim\vim74\vim.exe^""

但这不起作用,导致错误:

 ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
 Type "SETX /?" for usage.

所以我只是在控制面板中打开系统设置并在环境变量GUI中设置值。现在工作正常,我可以set svn在命令行输入,它会显示我需要的引用。

如果您确实需要以编程方式设置环境变量,则需要自己查看注册表。这在 C 和 Python 中都非常简单(也可能在其他语言中)。不过,它似乎无法setx为您做到。

于 2015-08-21T19:47:40.903 回答
1

正确的格式是 setx var "\path1;\path\path2\" /M only 请注意,由于我的路径以斜杠结尾,因此最终结果是结尾的 " 被转义并作为路径的一部分添加。

如果您的路径以斜杠结尾...您必须转义最后一个反斜杠...更正的版本是 setx var "\path1;\path\path2\\" /M

需要引号来保护任何嵌入的空间..例如“程序文件”

于 2016-08-18T03:59:59.993 回答
0

我放弃了直接使用 %PATH% 的尝试,因为它存在上述程序文件中的空格问题。

我写了一个小命令将“Program Files”替换为“Progra~”,但很快我意识到这并不好,因为还有其他带有空格的路径。代替

我找到了一篇描述查询注册表的好帖子。
因此,作为测试,我设置了一个系统变量 AAA 并附加了路径和 gradle

for /F "tokens=2* delims=   " %%f IN ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g

setx.exe AAA "%OLD_SYSTEM_PATH%%%GRADLE_HOME%%\bin;" -m

希望这可以帮助

于 2012-06-13T12:59:05.213 回答
0

我发现以下内容可以使用四个前导空格和三个尾随。通常,Windows 用另一个双引号对双引号进行转义,所以尾随双引号有意义,但是路径前面的额外双引号有点奇怪。

setx VAR """"C:\path\to a file\with spaces\file.txt"""
于 2020-01-22T18:45:23.107 回答