windows - 在批处理文件的 if/else 语句中使用 ")"

标签 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 ?

最佳答案

不是引用值,而是引用赋值操作

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

关于windows - 在批处理文件的 if/else 语句中使用 ")",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42042895/

相关文章:

powershell - 批处理文件未正确读取标志

java - 使用字符串的 IF 语句

windows - 如何获得确认所有未提交更改的工作目录哈希?

c# - 将 Linux 日期时间转换为 Windows 本地日期时间格式

C# Winforms 不规则窗口

c++ - 如何将 char 字符串转换为 wchar_t 字符串?

batch-file - 简单的批处理文件,如果 number = this echo hello,否则 echo world

sql - 如何在Oracle中通过.bat文件执行插入SQL?

c# - 多个条件表达式和 ": expected"错误

java - 如何使用 if 语句或 for 循环设置枚举?