SETX PATH 命令中的空格

Jer*_*ein 3 windows-server-2003 batch-file environment-variables

假设我的路径是 C:\WINDOWS\system32\;C:\Program Files\Important\

SET NEW_PATH=C:\My\Dir\
SETX PATH "%PATH%;%NEW_PATH%"
Run Code Online (Sandbox Code Playgroud)

结果路径为:

C:\WINDOWS\system32\;C:\Program Files\Important\;C:\My\Dir"

注意路径末尾的引号。就好像 %NEW_PATH% 末尾的反斜杠逃脱了最后的引号。我需要引号,因为我的路径中有空格,但我不希望反斜杠被解释为转义字符。

在对 SETX 的调用中包含我的 PATH 的正确方法是什么?

Joe*_*oey 6

结尾不要加反斜杠%NEW_PATH%

如果您开始使用随机输入而不是您控制的内容,那么您可以执行以下操作之一:

  • 去掉右引号。这在某些情况下确实有效:

    > setx foo "bar baz
    
    > echo %foo%
    bar baz
    
    Run Code Online (Sandbox Code Playgroud)

    但在其他方面表现不佳:

    > setx foo "Some stuff "with" embeddded quotes
    
    > echo %foo%
    Some stuff with embeddded quotes
    
    Run Code Online (Sandbox Code Playgroud)

    但是,您一开始就遇到了这个问题,因此您在那里所做的事情充其量是危险的,因为它会破坏引用的路径(如果您的路径包含分号,则需要这样做)

    这导致我们选择以下选项:

  • 正确转义进入命令的任何内容:

    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%
    
    Run Code Online (Sandbox Code Playgroud)