当值包含括号时如何在 if 块内设置变量的值

afz*_*lex 1 windows batch

我在 if 块内设置值时遇到问题。请考虑以下代码:

\mytool.bat

@echo off
if not "%adder%" == "" (
    set val=%val%;%adder%
) else (
    echo please set adder first
)
echo value="%val%"
Run Code Online (Sandbox Code Playgroud)

现在,当我通过 cmd 运行以下命令时:

set adder=a(bc)d
mytool
Run Code Online (Sandbox Code Playgroud)

它给了我错误即

d was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

另一方面,以下正在工作

set adder=abcd
mytool
Run Code Online (Sandbox Code Playgroud)

对于输出,value=";abcd"
即使adder有括号,我也希望有类似的行为。
我也尝试过这个。但它只保留批处理内变量 val 的更改。

Dav*_*ill 5

当值包含括号时,如何在 if 块内设置变量的值?

如果变量值包含括号(或者)需要引用set批处理文件中右侧的表达式set "val=%val%;%adder%"

测试.cmd:

@echo off
if not "%adder%" == "" (
    set "val=%val%;%adder%"
) else (
    echo please set adder first
)
echo value=%val%
Run Code Online (Sandbox Code Playgroud)

输出:

C:\test>set val=somevalue

C:\test>set adder=a(bc)d

C:\test>test
value=somevalue;a(bc)d
Run Code Online (Sandbox Code Playgroud)

“因为 val 的值不会在批处理文件之外保留”

不对。

C:\test>set | findstr val
val=somevalue;a(bc)d
Run Code Online (Sandbox Code Playgroud)

进一步阅读