SETX PATH 命令中的空格

SETX PATH 命令中的空格

假设我的 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"\

相关内容