【问题标题】:Extract string between two parameters within xml file using batch preferrably最好使用批处理在xml文件中的两个参数之间提取字符串
【发布时间】:2026-02-14 00:20:04
【问题描述】:

我一直在努力提取 xml 文件中两个字符串之间的数据。 我需要提取两个标签之间的数据。

这两个标签是:

<ns3:UTF8String id="ChassisNo">

</ns3:UTF8String>

我已经尝试过在两个标签之间提取字符串的代码,但标签通常更简单,如下所示。 此外,我要在其中提取数据的标签包含引号。

<tag> </tag>

我已尝试使用以下代码,但无法使其适用于我的示例。

@ECHO Off
SETLOCAL
SET "sourcedir=C:\Users\a067935\Desktop\Wheel alignment"
SET "filename1=%sourcedir%\test.xml"
FOR /f "delims=" %%a IN ('FINDSTR /i /L /c:"<ns3:UTF8String id="ChassisNo">" "%filename1%"') DO SET "name=%%a"
SET "name=%name:*<ns3:UTF8String id="ChassisNo">=%"
FOR /f "delims=<" %%a IN ("%name%") DO set "name=%%a"
ECHO "%name%"
GOTO :EOF

示例 xml 文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:WriteRequest xmlns="ng:eie:common:header" xmlns:ns2="ng:eie:datapoint:writerequest" xmlns:ns3="ng:eie:common:datatypes" dataPointID="Request">
    <ns2:Header>
        <Timestamp>2017-07-05 14:27:18.979</Timestamp>
        <UniqueID>f558c39c-cb19-439a-97fb-2c2dfd4a0f2e</UniqueID>
    </ns2:Header>
    <ns2:Data>
        <ns3:Struct id="Request">
            <ns3:Integer id="Version">1</ns3:Integer>
            <ns3:UTF8String id="Operator">a262236</ns3:UTF8String>
            <ns3:Array id="Identifiers">
                <ns3:Struct id="Identifier0">
                    <ns3:Struct id="UnitIdType">
                        <ns3:UTF8String id="Type">KD</ns3:UTF8String>
                        <ns3:UTF8String id="Id">01KD000001</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="DeliveryOrderType">
                        <ns3:UTF8String id="ProductType">KD</ns3:UTF8String>
                        <ns3:UTF8String id="DeliveryOrderId">0000160751</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="ExecutionOrderType">
                        <ns3:UTF8String id="Id">0000160751_KD</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="InstructionType">
                        <ns3:UTF8String id="Id">0000160751_KD</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="TraceabilityType">
                        <ns3:UTF8String id="Id">KD-01KD000001</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="ChassisIdType">
                        <ns3:UTF8String id="ChassisType">M</ns3:UTF8String>
                        <ns3:UTF8String id="ChassisNo">943524</ns3:UTF8String>
                    </ns3:Struct>
                    <ns3:Struct id="VINType">
                        <ns3:UTF8String id="Id">YVgfhffj66943524</ns3:UTF8String>
                    </ns3:Struct>
                </ns3:Struct>
            </ns3:Array>
            <ns3:Array id="Operations">
                <ns3:Struct id="Operation000">
                    <ns3:Integer id="Sequence">0</ns3:Integer>
                    <ns3:Integer id="OperationCode">1</ns3:Integer>
                    <ns3:UTF8String id="OperationProgram">1</ns3:UTF8String>
                    <ns3:Integer id="BatchSize">1</ns3:Integer>
                    <ns3:Array id="Parameters">
                        <ns3:Struct id="1">
                            <ns3:UTF8String id="1">F1,D1,D2</ns3:UTF8String>
                            <ns3:UTF8String id="2">R</ns3:UTF8String>
                            <ns3:UTF8String id="18">Y</ns3:UTF8String>
                            <ns3:UTF8String id="13">590</ns3:UTF8String>
                            <ns3:UTF8String id="14">445</ns3:UTF8String>
                            <ns3:UTF8String id="17">3</ns3:UTF8String>
                            <ns3:UTF8String id="3">D1</ns3:UTF8String>
                            <ns3:UTF8String id="12">375</ns3:UTF8String>
                            <ns3:UTF8String id="11">-1295</ns3:UTF8String>
                            <ns3:UTF8String id="21">1190</ns3:UTF8String>
                            <ns3:UTF8String id="103">0,2</ns3:UTF8String>
                            <ns3:UTF8String id="101">0</ns3:UTF8String>
                            <ns3:UTF8String id="105">1</ns3:UTF8String>
                            <ns3:UTF8String id="23">1,5</ns3:UTF8String>
                            <ns3:UTF8String id="102">0</ns3:UTF8String>
                            <ns3:UTF8String id="107">0,5</ns3:UTF8String>
                            <ns3:UTF8String id="22">1</ns3:UTF8String>
                            <ns3:UTF8String id="104">2,2</ns3:UTF8String>
                            <ns3:UTF8String id="20">850</ns3:UTF8String>
                            <ns3:UTF8String id="113">22,5</ns3:UTF8String>
                            <ns3:UTF8String id="401">3600</ns3:UTF8String>
                            <ns3:UTF8String id="112">385-65</ns3:UTF8String>
                            <ns3:UTF8String id="402">0</ns3:UTF8String>
                            <ns3:UTF8String id="412">315-80</ns3:UTF8String>
                            <ns3:UTF8String id="115">Y</ns3:UTF8String>
                            <ns3:UTF8String id="413">22,5</ns3:UTF8String>
                            <ns3:UTF8String id="114">Set</ns3:UTF8String>
                            <ns3:UTF8String id="403">0,2</ns3:UTF8String>
                            <ns3:UTF8String id="514">Measured</ns3:UTF8String>
                            <ns3:UTF8String id="501">1370</ns3:UTF8String>
                            <ns3:UTF8String id="503">0,2</ns3:UTF8String>
                            <ns3:UTF8String id="512">315-80</ns3:UTF8String>
                            <ns3:UTF8String id="415">Y</ns3:UTF8String>
                            <ns3:UTF8String id="513">22,5</ns3:UTF8String>
                            <ns3:UTF8String id="506">0</ns3:UTF8String>
                            <ns3:UTF8String id="414">Measured</ns3:UTF8String>
                            <ns3:UTF8String id="502">0</ns3:UTF8String>
                            <ns3:UTF8String id="507">2</ns3:UTF8String>
                            <ns3:UTF8String id="515">Y</ns3:UTF8String>
                        </ns3:Struct>
                    </ns3:Array>
                </ns3:Struct>
            </ns3:Array>
        </ns3:Struct>
    </ns2:Data>
</ns2:WriteRequest>

【问题讨论】:

  • 您应该知道,像 Powershell、Vbscript 和 Jscript 这样的脚本语言都具有读取和写入 XML 文件的本机能力。是的,有时您可以使用批处理文件强制执行它,但随着复杂性的增加,使用具有本机读写 XML 能力的语言会更容易。

标签: xml batch-file xml-parsing


【解决方案1】:
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q45583503.txt"

FOR /f "tokens=1-7delims=<=>" %%a IN (
 'findstr /R "ns3:UTF8String.id=.ChassisNo." "%filename1%" '
) DO ECHO chassisno=%%d
)

GOTO :EOF

您需要更改sourcedir 的设置以适应您的情况。

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

使用findstr 的受限正则表达式工具和delims 容量for/f

【讨论】: