假设我的 PATH 是C:\WINDOWS\system32\;C:\Program Files\Important\
SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%;%NEW_PATH%"
路径结果为:
C:\WINDOWS\system32\;C:\Program Files\Important\;C:\My\Dir”
注意路径末尾的引号。就好像 %NEW_PATH% 末尾的反斜杠转义了最后一个引号。我需要引号,因为我的路径中有空格,但我不希望反斜杠被解释为转义字符。
在 SETX 调用中包含我的 PATH 的正确方法是什么?
答案1
不要在 末尾添加反斜杠%NEW_PATH%
。
如果您一开始就得到的是随机输入而不是您控制的内容,那么您可以执行以下操作之一:
省略结束引号。在某些情况下,这样做确实有效:
> setx foo "bar baz > echo %foo% bar baz
但在其他方面表现并不好:
> setx foo "Some stuff "with" embeddded quotes > echo %foo% Some stuff with embeddded quotes
但是,你一开始就已经有这个问题了,所以你在那里做的事情充其量是危险的,因为它会破坏引用的路径(如果您的路径包含分号,则需要它)。
这引出了以下选择:
正确地转义命令中的任何内容:
set NEW_PATH=C:\I\Hate\User\Dirs\In\The\Root\ rem Note the extra quotation marks; we're constructing the complete rem argument to setx here. set NEW_PATH_VAR="%PATH%;%NEW_PATH%" rem The great escape set NEW_PATH_VAR=%NEW_PATH_VAR:"=\"% setx PATH %NEW_PATH_VAR%
答案2
如果NEW_PATH
不包含空格,则不需要引用它:
SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%";%NEW_PATH%
如果NEW_PATH
确实包含空格,则可以使用文字值,并且再次不引用最后的反斜杠:
SETX PATH "%PATH%;C:\My Dir"\