2017-09-25 31 views
0

在尝试重用代码我试图使用动态变量来测试一个条件,但无法得到我需要的结果。我正在使用延迟扩展。动态变量语法与延迟扩展

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的值)

我和转义字符周围乱七八糟,但能不要让这个工作。帮帮我!

+1

...但当然这很容易:'If!SUB_TRANSTYPE!== H Echo sub_transtype_header!!H_HEADER!' – Compo

+0

它是,但我想重复使用我的代码,而不是有100个单独的行与静态变量。 – ash

+0

您和您接受的答案都使用了静态字符,在'If'比较开始时'H'因此不需要使用变量来表示同一行末尾完全相同的已知静态字符。 – Compo

回答

0

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说明。

+0

谢谢,是的,你发现我的错字。我会在原文中纠正它们。 Magoo建议,对CALL语句的FOR语句是否有任何好处? – ash

+0

在链接的答案中有这样的解释:_“实现上一个过程的另一种方法是使用额外的FOR命令,通过等效的可替换参数更改索引的延迟扩展,然后使用数组元素的延迟扩展**这个方法的运行速度比以前的CALL **更快 - 另外,你可以在'for'中放置一个'if',并直接完成比较,不需要额外的变量。 – Aacini

0
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" (
+0

谢谢,这工作。那么我怎么在IF声明中组装类似的声明呢?推测CALL不适用于IF?即\t \t if %%!SUB_TRANSTYPE!_HEADER %% == FALSE() – ash