以下是无法正常工作的代码段:
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?
答案 0 :(得分:3)
不是引用值,而是引用赋值操作
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
答案 1 :(得分:1)
您需要转义括号:
if /i "%MYMACHINENAME%"=="BuildmasterW64" (
set PROGRAMFILESDIR=C:\Program Files ^(x86^)
set WISEDIR="C:\Program Files ^(x86^)\Wise Installation Studio\WiseScript Package Editor"
)
哦,并添加 / I 以使比较不区分大小写。