批量复制XML中两个标记之间的字符串

时间:2014-02-14 18:56:35

标签: xml string batch-file tags between

需要使用批处理脚本拉出两个XML标记之间的所有字符串。我只想在<appSettings></appSettings>之间拉出字符串。本节上下有许多字符串;需要忽略所有其他字符串。

我尝试了this解决方案,但由于我的开始和结束字符串包含“<”,我相信会抛弃代码。

示例:

File1.txt(从此文件中读取)

::Many lines of code to start with.  ~150 lines
<appSettings>
    <add key="1" value="False" />
    <add key="2" value="False" />
    <add key="3" value="False" />
    <add key="4" value="False" />
    <add key="5" value="False" />
    <add key="6" value="False" />
    <add key="7" value="False" />
    <add key="8" value="False" />
    <add key="9" value="False" />
    <add key="10" value="False" />
    <add key="11" value="False" />
    <add key="12" value="False" />
    <add key="13" value="False" />
    <add key="14" value="False" />
    <add key="15" value="False" />
    <add key="16" value="False" />
    <add key="17" value="False" />
</appSettings>
::Many strings below this ~25 lines

File2.txt (创建并写入此文件)

*应创建此文件,并包含来自File1.txt的<appSettings></appSettings>之间的所有字符串

3 个答案:

答案 0 :(得分:0)

只要<appSettings>标签本身在线上,此解决方案就应该有效。我试图考虑无关的空白(标签之外)。该脚本的第一个参数是XML文件。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET INSIDE_ELT=0
FOR /F "delims=" %%l IN (%~1) DO (
    SET "LINE=%%~l"
    SET "LINE=!LINE:<=__-_!"
    SET "LINE=!LINE:>=_-__!"
    CALL :STRIP !LINE!
    SET "LINE=!_STRIPPED:__-_=<!"
    SET "LINE=!LINE:_-__=>!"
    IF "!LINE!"=="</appSettings>" SET INSIDE_ELT=0
    IF "!INSIDE_ELT!"=="1" @ECHO %%l
    IF "!LINE!"=="<appSettings>" SET INSIDE_ELT=1
)


:STRIP
SET "_STRIPPED=%*"
EXIT /B

答案 1 :(得分:0)

这是一个非常简单快速的解决方案,使用REPL.BAT - a hybrid JScript/batch utility执行正则表达式搜索并替换stdin并将结果写入stdout。该脚本是纯脚本,可​​以从XP开始在任何现代Windows机器上本机运行。完整的文档嵌入在脚本中。

假设REPL.BAT位于您当前的目录中,或者更好,位于PATH中的某个位置,那么:

type file1.txt|repl "[\s\S]*?<appSettings>([\s\S]*?)</appSettings>[\s\S]*" $1 m >file2.txt

答案 2 :(得分:0)

对于这项任务,Aacini的FINDREPL.BAT非常直观,而且非常快速和强大。

以下是名为findrepl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

下载

findrepl.bat放在与批处理文件相同的文件夹中或路径上。

type file1.txt|findrepl /i "<appSettings>" /e:"</appSettings>" >file2.txt