在批处理文件中的if / else语句中使用“)”

时间:2017-02-04 16:46:48

标签: windows batch-file if-statement

以下是无法正常工作的代码段:

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?

2 个答案:

答案 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 以使比较不区分大小写。