我需要从文本文件中提取一些信息。这是文件:
<?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
感谢您的帮助
答案 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
您需要更改sourcedir
和filename1
的设置以适合您的具体情况。
我使用了一个名为q34872773.txt
的文件,其中包含我的测试数据。
在<
,=
和>
上逐行读取文件到%% A,%% b,%% c
%% a将收到缩进空格
%% b将收到令牌字符串
%% c将收到感兴趣的数据
如果%%b
为Name title
,则执行子程序setname
,从该行的其余部分传递感兴趣的部分。这里的第一个字符串是引用的名称。子例程simple接受它给出的第一个参数并分配该字符串,而不引用name
。
遇到Source
标记时,生成报告;碰撞section
计数器并吐出余数。
如果要将输出定向到文件,请先删除该文件,然后将>>"filename"
追加到call :report
行。