Bat:设置命令在括号内不起作用

Bat: Set command not working inside parenthesis

我遇到过 bat 命令的这种奇怪行为:

Set path=%path%;C:\Myfolder;

工作得很好。但是当我把它放在括号内时,它的行为很奇怪:

if defined WINDIR (set path=%path%;C:\Myfolder)
\NVIDIA was unexpected at this time.

甚至

(set path=%path%;C:\Myfolder)
\NVIDIA was unexpected at this time.

请注意

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common

是我的 Path 环境变量的一部分。

这里用()有什么问题吗?

如果 set 命令放在括号内,那么 %path% 扩展会放置一个右括号来关闭原来的括号;即:

set path=C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common

(set path=%path%;C:\Myfolder)

%path%变量在第二行展开时,结果是这样的:

(set path=C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Myfolder)

您可能会看到 (x86) 部分的右括号关闭了原来的左括号,因此该行的下一部分是 \NVIDIA Corporation\PhysX\Common;C:\Myfolder),这就是错误的原因。

为避免此错误,只需将 set 命令中的值用引号引起来:

(set "path=%path%;C:\Myfolder")