我尝试制作一个批处理脚本,可以批量提取两个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并将其设置在变量中?
答案 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!