SETX PATH命令中的空格

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

 SET NEW_PATH=C:\My\Dir\ SETX PATH "%PATH%;%NEW_PATH%" 

结果在以下path中:

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

注意path末尾的引号。 就好像%NEW_PATH%结尾处的反斜线转义了最后的引号。 我需要引号,因为我的path中有空格,但是我不想将反斜杠解释为转义字符。

在通话中包含PATH的正确方法是什么?

不要在%NEW_PATH%末尾加一个反斜杠。

如果你有随机的input,而不是你控制的东西,那么你可以执行以下操作之一:

  • 不包括结束语引号。 这在一些情况下有效:

     > setx foo "bar baz > echo %foo% bar baz 

    但在其他方面做得不好:

     > setx foo "Some stuff "with" embeddded quotes > echo %foo% Some stuff with embeddded quotes 

    然而,你已经有了这个问题,所以你在那里做了什么是最危险的,因为它会摧毁引用的path(如果你的path包含一个分号,就需要这个path) 。

    这导致我们有以下select:

  • 恰当地逃避一切命令:

     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% 

如果NEW_PATH不包含空格,则不需要引用它:

 SET NEW_PATH=C:\My\Dir\ SETX PATH "%PATH%";%NEW_PATH% 

如果NEW_PATH包含空格,则可以使用文字值,并且不要引用最后一个反斜杠:

 SETX PATH "%PATH%;C:\My Dir"\