具有延迟扩展的动态变量语法

Dynamic variable syntax with delayed expansion

为了重用代码,我尝试使用动态变量来测试条件,但无法获得我需要的结果。我正在使用延迟扩展。

1    Outside the for loop:
2    set "H_HEADER=FALSE"
3    set "SUB_TRANSTYPE=#"
4    
5    Inside the for loop:
6    set "SUB_TRANSTYPE=!FULL_LINE:~0,1!"
7    if !SUB_TRANSTYPE!==H (
8      echo sub_transtype_header is !!SUB_TRANSTYPE!_HEADER!
9    )

第 6 行将 SUB_TRANSTYPE 设置为 H

第 8 行打印 H_HEADER 到控制台,但我希望它打印 FALSE(H_HEADER 的值)

我已经弄乱了转义字符,但无法正常工作。求助!

if !SUB_TRANSTYPE!==H (
   CALL echo sub_transtype_header is %%!SUB_TRANSTYPE!_HEADER%%
)

请注意,== 运算符中缺少 =

这会在子 shell 中执行 echo


要解释 if 语句中的值,请使用

call set "someothervariable=%%!SUB_TRANSTYPE!_HEADER%%"
if "!someothervariable!"=="value" (

第 6 行应该是:

set "SUB_TRANSTYPE=!FULL_LINE:~0,1!"

第 7 行应该是:

if !SUB_TRANSTYPE!==H (

第 8 行应该是:

for /F %%A in ("!SUB_TRANSTYPE!") do echo sub_transtype_header is !%%A_HEADER!

此类管理在 this answer 中有完整描述。