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