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

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/

10-12 00:52