从文本文件中提取子字符串

时间:2018-06-18 15:33:31

标签: batch-file

我尝试制作一个批处理脚本,可以批量提取两个xml标记之间的值。

我通过执行我重定向到临时文件的curl cmd来获取我的xml文件:

curl -X POST -H "key:value" -i http://mywebsite/ask -d "<xml body>" > tmp

然后,我像这样搜索我的标签:

findstr "<abc:id>" tmp

我可以在cmd控制台中看到显示正确的行:

<abc:id>the_id_that_i_want</abc:id>

但在那之后我无法得到我的身份。

我已经尝试将'findstr'结果转发到文件,然后读取它没有成功。

我也试过使用这个脚本:

for /F "delims=" %%i in ('findstr "<abc:id>" tmp') do set var=%%i
echo %var%

但是我的脚本在echo语句中崩溃了。

那么,如何提取我的id并将其设置在变量中?

2 个答案:

答案 0 :(得分:1)

for /F "tokens=2delims=<>"...

采取行

<abc:id>the_id_that_i_want</abc:id>

并使用<>作为分隔符对其进行标记。

第一个令牌是abc:id,第二个the_id_that_i_want和第三个/abc:id

所以你需要选择第二个。

echo崩溃,因为echo编辑的字符串包含重定向符(><

答案 1 :(得分:0)

一件事是编写命令:setlocal enabledelayedexpansion。否则,“ for”将无法正确运行。

另一件事是,不将变量与%标签一起使用,而与!标签一起使用。那让可变文本与重定向器(><)一起使用。

最后,我得到了该脚本:

curl -X POST -H "key:value" -i http://mywebsite/ask -d "<xml body>" > tmp

setlocal enabledelayedexpansion

for /F "delims=" %%i in ('findstr "<abc:id>" tmp') do set var=%%i

for /F "tokens=1,2 delims=<abc:id>" %%a in ("!var!") do set var2=%%b

DEL tmp

ECHO Id : !var2!