从文本文件批量提取信息

时间:2016-01-19 09:17:38

标签: 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>
   </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>

我需要在姓名标题之后引用文字= NAME_1,NAME_2和NAME_3以及标记之间的文字&#34;来源&#34;

我想要的输出是:

1
1 NAME_1
1,source,mms://MYSOURCE_1.com
2
2 NAME_2
2,source,http://MYSOURCE_2.com
3
3 NAME_3
3,source,http://MYSOURCE_3.com

我已经完成了第二部分,在标签之间提取文本,但我不知道如何制作名称标题=部分并在一个脚本中制作所有内容

我的尝试:

@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

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q34872773.txt"
SET /a section=0
FOR /f "usebackqtokens=1,2,3delims=<=>" %%a IN ("%filename1%") DO (
 IF "%%b"=="Name title" CALL :setname %%c
 IF "%%b"=="Source" CALL :report "%%c"

)

GOTO :EOF

:report
SET /a section +=1
ECHO %section%
ECHO %section% %name%
ECHO %section%,%~1

GOTO :EOF

:setname
SET "name=%~1"
GOTO :EOF

您需要更改sourcedirfilename1的设置以适合您的具体情况。

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

<=>上逐行读取文件到%% A,%% b,%% c

  • %% a将收到缩进空格

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

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

如果%%bName title,则执行子程序setname,从该行的其余部分传递感兴趣的部分。这里的第一个字符串是引用的名称。子例程simple接受它给出的第一个参数并分配该字符串,而不引用name

遇到Source标记时,生成报告;碰撞section计数器并吐出余数。

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