Batch file 从文本文件中批量提取信息

Batch file 从文本文件中批量提取信息,batch-file,Batch File,我需要从文本文件中提取一些信息。这是文件: <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <XMLEDIT version="XMLEDIT TEST Favorites"> <Name title="NAME_1" url="www.etc.com"> <Source>mms://MYSOURCE_1.com</Source> <

我需要从文本文件中提取一些信息。这是文件:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<XMLEDIT version="XMLEDIT TEST Favorites">
   <Name title="NAME_1" url="www.etc.com">
      <Source>mms://MYSOURCE_1.com</Source>
   </Name>
   <Name title="NAME_2" url="www.etc.com/">
      <Source>http://MYSOURCE_2.com</Source>
   </Name>
   <Name title="NAME_3" url="www.etc.com/">
      <Source>http://MYSOURCE_3.com</Source>
   </Name>
</XMLEDIT>
我已经做了第二部分,提取标签之间的文本,但我不知道如何使名称Title=part和使所有内容在一个脚本中

我的尝试:

@echo off
setlocal enabledelayedexpansion
set Num=0
for /f "tokens=3 delims=<>" %%a in ('find "<Source>" ^< "C:\Test.txt"') Do (
 set /a Num+=1
 echo !Num!
 echo !Num! here title
 echo !Num!,source,%%a
)
pause
@echo关闭
延迟扩展
set Num=0
对于/f“tokens=3 delims=“%%a in('find”“^<”C:\Test.txt“)Do(
set/a Num+=1
回声!Num!
echo!Num!这里是标题
echo!Num!,源,%%a
)
暂停
感谢您的帮助

@ECHO OFF
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“filename1=%sourcedir%\q34872773.txt”
设置/a节=0
对于/f“usebackqtokens=1,2,3delims=“%%a IN”(“%filename1%”)DO(
如果“%%b”==“名称标题”调用:setname%%c
如果“%%b”==“源”调用:报告“%%c”
)
后藤:EOF
:报告
集合/a区段+=1
回音%段%
回显%section%%name%
回显%section%,%~1
后藤:EOF
:setname
设置“名称=%~1”
后藤:EOF
您需要更改
sourcedir
filename1
的设置以适应您的环境

我使用了一个名为
q34872773.txt
的文件,其中包含用于测试的数据

逐行读取文件,在
上标记到%%A、%%b、%%c

  • %%a将接收缩进空格

  • %%b将接收令牌字符串

  • %%c将收到感兴趣的数据

如果
%%b
Name title
,则执行子例程
setname
,从行的其余部分传递感兴趣的部分。这里的第一个字符串是带引号的名称。子例程simple接受给定的第一个参数,并将该字符串赋给
name
,不带引号

当遇到
标记时,生成报告;撞击
部分
计数器并吐出剩余部分


如果要将输出定向到文件,请先删除该文件,然后将
>“filename”
附加到
call:report
行。

是否必须批量执行此操作?PowerShell内置了强大的XML功能,这将使您的生活轻松数百倍!是的,我更喜欢批处理(或者至少是VBS),因为我知道它,Powershell对我来说是一种未知的语言,所以将来如果我需要编辑它,我不知道如何管理它,谢谢
@echo off
setlocal enabledelayedexpansion
set Num=0
for /f "tokens=3 delims=<>" %%a in ('find "<Source>" ^< "C:\Test.txt"') Do (
 set /a Num+=1
 echo !Num!
 echo !Num! here title
 echo !Num!,source,%%a
)
pause