这是无法正常工作的代码段:
set MYMACHINENAME=BuildmasterW32
if "%MYMACHINENAME%"=="BuildmasterW32" (
set PROGRAMFILESDIR=D:\Program Files
set WISEDIR=D:\Program Files\Wise Installation Studio\WiseScript Package Editor
)
if "%MYMACHINENAME%"=="BuildmasterW64" (
set PROGRAMFILESDIR=C:\Program Files (x86)
set WISEDIR="C:\Program Files (x86)\Wise Installation Studio\WiseScript Package Editor"
)
set WISEDIR
rem we see `C:\Program Files (x86)\Wise Installation Studio\WiseScript Package Editor` at this point
pause
我希望能看到
D:\Program Files...
的值。原因是上一行的结束圆括号设置了PROGRAMFILESDIR,关闭了条件语句,并且WISEDIR的值被覆盖。
如果我用双引号将PROGRAMFILESDIR的值括起来,则代码可以正常工作,但是PROGRAMFILESDIR变得等于
"C:\Program Files (x86)"
(引号指向变量)而不是C:\Program Files (x86)
(根据我的需要)。那不是我想要的,因为PROGRAMFILESDIR是一个前缀,以后会在其中添加相对路径,因此该值中必须没有引号。我试图在PROGRAMFILESDIR分配行中的
)
之前添加一个反斜杠,但这似乎没有任何效果。我提供的代码片段中是否有任何解决方案,或者我必须重写它才能使用goto代替if/else?
最佳答案
您需要转义括号:
if /i "%MYMACHINENAME%"=="BuildmasterW64" (
set PROGRAMFILESDIR=C:\Program Files ^(x86^)
set WISEDIR="C:\Program Files ^(x86^)\Wise Installation Studio\WiseScript Package Editor"
)
哦,并添加/I使比较不区分大小写。
关于windows - 在批处理文件的if/else语句中使用 “)”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42042895/