setx设置带空格的PATH

时间:2012-06-13 08:39:11

标签: windows windows-shell setx

我正在尝试在win32 shell脚本中更新系统Path变量,但仅在没有值的情况下更新。

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

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'

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

有没有办法克服这个问题?

7 个答案:

答案 0 :(得分:7)

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

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

请注意,只有一个双引号,它在开头..如果你把一个放在最后,它最终在路径字符串中(没有一个在开头)。

答案 1 :(得分:1)

单引号在Windows中无效。周期。

实际上,你的代码对我的双引号有效。

答案 2 :(得分:1)

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

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

我发现这个,而#34;正确",不起作用,因为这个变量的用户被路径中的空格绊倒所以我需要在那里放置引号。

我找到了

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可以为你做到这一点。

答案 3 :(得分:1)

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

setx vcs "\"E:\Program Files\IDE\vcsexpress.exe\"

答案 4 :(得分:0)

我放弃了尝试直接使用%PATH%,因为这有上面提到的问题与程序文件中的空格。

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

我发现了一个很好的post描述了对注册表的询问 因此,作为测试,我设置了一个System变量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

希望这有帮助

答案 5 :(得分:0)

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

如果你的路径以斜线结尾......你必须逃避最后一个反斜杠...然后修正后的版本         setx var“\ path1; \ path \ path2 \\”/ M

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

答案 6 :(得分:0)

我发现以下内容可用于四个前导空格和三个尾随空格。通常,Windows会将双引号转义为另一个双引号,因此尾随双引号是有意义的,但是路径前面的多余双引号有点奇怪。

setx VAR """"C:\path\to a file\with spaces\file.txt"""