我一直在使用这里列出的这个想法
Parse XML file for attribute from batch file
但我不能发表评论,要求提出更多问题,所以我要求更多帮助,这不是真正的重复,因为我改变了几件事
所以我的channelGuide.xml看起来像这个
<Guide>
<listings>
<channels>
<channel ID='1' name='big bang' url='http://v.com/bigbang' quality='best' />
<channel ID='2' name='AMerican Dad' url='http://v.com/americandad' quality='best' />
</channels>
</listings>
</Guide>
现在我的.bat文件如下所示:
@echo off
cls
setlocal EnableDelayedExpansion
for /F tokens^=2^-9^,7delims^=^<^"^= %%a in (channelGuide.xml) do (
if "%%a" equ "channel ID" echo(%%b %%c %%d %%e>>"%~d0%~p0\channelListings.txt"
)
但出于某种原因,我的.tx会像这样回来:
'1' name 'big bang' url 'http://v.com/bigbang' quality 'best' />
'2' name 'AMerican Dad' url 'http://v.com/americandad' quality 'best' />
我不希望使用单引号或其他任何内容,只是看起来像这样:
1 big bang http://v.com/bigbang best
2 AMerican Dad http://v.com/americandad best
答案 0 :(得分:2)
@ECHO OFF
SETLOCAL
for /F "tokens=2,4,6,8delims='" %%a in (q25617807.txt) do (
if "%%d" neq "" echo(%%a %%b %%c %%d
)
GOTO :EOF
我使用了一个名为q25617807.txt
的文件,其中包含我的测试数据,并删除了文件重定向以适应我的测试制度。
说明,使用提供的单一数据线
<channel ID='1' name='big bang' url='http://v.com/bigbang' quality='best' />
数据行使用单引号作为分隔符标记为标记
其中,选择了令牌2,4,6和8,因此它们按顺序应用于%% a .. %% d。
另一行不太可能在单引号中包含4个字符串(并且未在原始数据中显示),因此只需过滤“%% d”不为空即可。
时间?经过13年的失业,我就是那种黑桃......
答案 1 :(得分:1)
您可以尝试xpath.bat - 脚本,该脚本可以通过给定的xpath从xml文件中获取值:
for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@name"') do (
set name1=%%#
)
for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@url"') do (
set url1=%%#
)
for /f "tokens=* delims=" %%# in ('xpath.bat "chanel.xml" "//channel[0]/@quality"') do (
set quality1=%%#
)
echo %name1% %url1% %quality1%
答案 2 :(得分:0)
for /f "tokens=1,2,3,5,7,9 delims='<" %%a in (channellistings.xml) do if "%%b"=="channel ID=" echo %%c %%d %%e %f
您应该考虑使用(例如);
而不是空格来界定输出。之后处理它可能会更容易。 (例如用excel阅读)