Windows批处理文件 - 多个条件和行

时间:2014-01-29 18:24:55

标签: windows batch-file echo

我需要使用BATCH文件从文件中提取信息。我在Windows中安装了AWK(GNUWIN32)。

文本文件包含 -

# FOR Example Purposes  *** #
# Dated on Jan 29, 2014

TEST_tag=branch_release_v_2.0.82.91_YOU_Branch
NONE_tag=branch_release_v_12.0.82.1_ONE_Branch
DOIT_tag=branch_release_v_1.0.9_EXA_Branch

现在,我需要此文件的以下输出(删除注释和操作字符串) -

TEST/branch_release_v_2.0.82.91_YOU_Branch
NONE/branch_release_v_12.0.82.1_ONE_Branch
DOIT/branch_release_v_1.0.9_EXA_Branch

如果可以使用变量而不是将“_tag =”替换为“/”,我会更喜欢这样,我也可以将逻辑与其他格式一起使用。

这是我试图做的事情。

FOR /F "tokens=*" %%A IN ('awk "!/^($|#)/" test.txt') DO (
ECHO %%A | awk -F_ "{print $1}" > one.tmp
SET /P ONE=<one.tmp

ECHO %%A | awk -F= "{print $2}" > two.tmp
SET /P TWO=<two.tmp

ECHO %ONE%/%TWO%
)

它不起作用并打印相同的结果(最后一行仅打印3次)

DOIT/branch_release_v_1.0.9_EXA_Branch
DOIT/branch_release_v_1.0.9_EXA_Branch
DOIT/branch_release_v_1.0.9_EXA_Branch

解决方案(感谢Magoo)---

FOR /F "tokens=*" %%A IN ('awk "!/^($|#)/" test.txt') DO (

setlocal enabledelayedexpansion

ECHO %%A | awk -F_ "{print $1}" > one.tmp
SET /P ONE=<one.tmp

ECHO %%A | awk -F= "{print $2}" > two.tmp
SET /P TWO=<two.tmp

ECHO !ONE!/!TWO!
)

再次感谢。

1 个答案:

答案 0 :(得分:0)

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。在执行块之前,块中的任何%var%将被解析块时的变量值替换

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问已更改的var或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。