以下是不能按预期工作的片段:
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)closures了条件语句,并且WISEDIR的值被覆盖。
如果我用双引号括住PROGRAMFILESDIR的值,则代码工作正常,但PROGRAMFILESDIR等于"C:\Program Files (x86)"
(引号转到variables),而不是C:\Program Files (x86)
我需要。 这不是我想要的,因为PROGRAMFILESDIR是一个前缀,稍后添加相对path,因此值中不能有引号。
我试图在PROGRAMFILESDIR赋值行之前添加一个反斜杠)
,但是这似乎没有任何作用。
在我提供的代码片段中是否有解决scheme,或者我将不得不重写它来使用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" )
哦,并添加/我使比较不区分大小写。
引用赋值操作,而不是引用值
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 pause