使用repl.bat将文本从XML提取到文本

时间:2014-07-07 07:20:20

标签: xml batch-file

我已经使用repl.bat成功地从文本文件中提取了一些行数月。不幸的是,输出已更改为XML,现在它在XML标记中具有反斜杠作为分隔符。

以下是输出文件为

时我正在使用的内容
Job Notes=John Smith 123456 dd/MM/yyyy h:mm:ss PM 654321
File Type=4
Location=3

代码

@echo off
set "input=before.txt"
set "output=after.txt"
findstr /r /i /c:"^Job Notes=" "%input%" |repl ".*=(.*) (\d+) (\d+\/\d+\/\d+) \d+:\d+:\d+ .*" "Name=$1\r\nFile Number=$2\r\nDate=$3" x >"%output%"
findstr /r /i /c:"^File Type=" "%input%" >>"%output%"
findstr /r /i /c:"^Location="  "%input%" >>"%output%"

输出现在是XML

<job_notes>John Smith\123456\dd/MM/yyyy h:mm:ss PM\654321</job_notes>
<file_type>4</file_type>
<location>3</location>

不确定这是否是问题,但XML的结构是

<root>
    <job>
         <job_notes>xxxxxxx</job_notes>
         <file_type>x</file_type>
         <location>x</location>
     </job>
</root>

无法修改脚本。不确定问题是XML文件的结构还是分隔符。

谢谢

1 个答案:

答案 0 :(得分:0)

使用repl.bat编写的dbenham修改后的批处理文件:

@echo off
set "input=before.xml"
set "output=after.txt"
findstr.exe /r /i /c:"<job_notes>" "%input%" | repl.bat ".*job_notes.(.*)\\(\d+).(\d+\/\d+\/\d+).*" "Name=$1\r\nFile Number=$2\r\nDate=$3" x >"%output%"
findstr.exe /r /i /c:"<file_type>" "%input%" | repl.bat ".*file_type.(\d+).*" "File Type=$1" x >>"%output%"
findstr.exe /r /i /c:"<location>" "%input%" | repl.bat ".*location.(\d+).*" "Location=$1" x >>"%output%"

我用于测试 before.xml 以及以下数据:

<root>
    <job>
        <job_notes>John Smith\123456\02/06/2014 8:34:27 PM\654321</job_notes>
        <file_type>4</file_type>
        <location>3</location>
    </job>
</root>
执行批处理文件后

文件 after.txt 包含此输入示例:

Name=John Smith
File Number=123456
Date=02/06/2014
File Type=4
Location=3