我需要使用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!
)
再次感谢。
答案 0 :(得分:0)
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。在执行块之前,块中的任何%var%
将被解析块时的变量值替换。
因此,IF (something) else (somethingelse)
将在遇到%variables%
时使用IF
的值执行。
解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。