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'

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

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

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

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

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

我有点

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

setx vcs ""E:Program FilesIDEvcsexpress.exe"

单引号在 Windows 中永远不起作用。时期。

实际上,您的代码确实可以使用双引号对我有用。

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

setx SVN_EDITOR C:Program Filesvimvim74vim.exe

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

我发现

set SVN_EDITOR="C:Program Filesvimvim74vim.exe"

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

setx SVN_EDITOR "^"C:Program Filesvimvim74vim.exe^""

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

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

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

如果你真的需要以编程方式设置你的环境变量,你需要自己看看敲打注册表。这在C和Python中都非常简单(可能在其他语言中也是如此)。不过,setx似乎不能为你做到这一点。

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

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

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

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

写了一个小命令将"程序文件"替换为"Progra~",但很快我意识到这不好,因为还有其他带有空格的路径。取代

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

for /F "tokens=2* delims=   " %%f IN ('reg query "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment" /v Path ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx.exe AAA "%OLD_SYSTEM_PATH%%%GRADLE_HOME%%bin;" -m

希望这有帮助

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

setx VAR """"C:pathto a filewith spacesfile.txt"""

相关内容

  • 没有找到相关文章

最新更新