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

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

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

\我的工具.bat

@echo off
if not "%adder%" == "" (
    set val=%val%;%adder%
) else (
    echo please set adder first
)
echo value="%val%"

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

set adder=a(bc)d
mytool

它给了我错误即

d was unexpected at this time.

另一方面,以下是有效的

set adder=abcd
mytool

对于输出,我希望即使有括号value=";abcd"
也能有类似的行为。 我也试过了adder
. 但它仅保留批次内变量 val 的变化。

答案1

当值包含括号时,如何在 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%

输出:

C:\test>set val=somevalue

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

C:\test>test
value=somevalue;a(bc)d

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

不对。

C:\test>set | findstr val
val=somevalue;a(bc)d

进一步阅读

答案2

我的建议是:

if (condition_TRUE) goto goodbye_parenthesis_BEGIN

goto goodbye_parenthesis_END  ----- line when previous condition is FALSE ----
:goodbye_parenthesis_BEGIN ----- line when previous condition is TRUE ----

...
variable treatment
...

:goodbye_parenthesis_END

相关内容