【问题标题】:Extract a value from an xml file and output it to csv using a batch file从 xml 文件中提取值并使用批处理文件将其输出到 csv
【发布时间】:2013-12-06 03:17:20
【问题描述】:

我需要从文件夹中所有 xml 文件中的特定 xml 标记中提取值,并在 csv 文件的 2 个单独列中导出值和文件名(不带 ext)。我已经尝试过零运气。

xml 看起来像这样:

<ICSMXML xmlns="http://www.icsm.com/icsmxml" version="1.0">
<Header>
<MsgDelivery>
  <To>
    <Credential>
      <Domain>ICSMID</Domain>
      <Identity>11</Identity>
    </Credential>
  </To>
  <From>
    <Credential>
      <Domain>DUNS</Domain>
      <Identity>039576814</Identity>
    </Credential>
  </From>
  <Sender>
    <Credential>
      <Domain>DUNS</Domain>
      <Identity>039576814</Identity>
    </Credential>
    <UserAgent />
  </Sender>
</MsgDelivery>
<MsgHeader>
  <MessageId>10000095713</MessageId>
  <Timestamp>04/12/2013 10:24:00 AM</Timestamp>

我需要从文件夹中找到的任何 xml 文件中解析 MessageId 的值,并将其与原始文件名(不带分机)一起放入 csv 文件中。最好在第 1 列中包含值,在第 2 列中包含文件名 w.o ext。

@echo off
call :check_lines < %1 > "%~N1.xml"
exit /b

REM Seek for the start of Data tag
:check_lines
set /P line=
if not "%line%" == "<MessageId>" goto check_lines

REM Copy until the end of Data tag
set /P line=
:put_lines
if "%line%" == "</MessageId>" goto end_lines
set /P line=%line% 
goto put_lines
:end_lines
echo %line%
>>Message.csv

【问题讨论】:

    标签: xml batch-file


    【解决方案1】:

    应该这样做:

    @echo off
    setlocal enabledelayedexpansion
    for %%a in (*.xml) do (
    call :XMLExtract "%%a" "<MessageID>" location
    echo.!location!,%%~na
    )
    exit /b
    
    :XMLExtract file keystart location
    @echo off & setlocal
    for /f "tokens=3 delims=<>" %%a in ('Findstr /i /c:%2 "%~1"') do (
       set "loc=%%a" & goto :endloop
    )
    :endLoop
    ENDLOCAL & IF "%~3" NEQ "" (SET %~3=%loc%) ELSE echo.%loc%
    exit /b
    

    【讨论】:

    • 我运行了代码但无法生成 csv,我在关闭后移动了 >>Message.csv )并收到了 csv 但为空。
    • 您需要将该部分留在循环内。否则,它不会为每个文件都写出来。您是否完全按照我写的方式尝试过?
    • 我再次复制了代码,只是为了仔细检查并确保它是相同的并且没有收到 message.csv。
    • 啊,都在同一行。此代码旨在提取单独行上的标签。我得重做。
    • 一旦我添加到 >>Message.csv 中,它就像一个魅力,感谢您的帮助,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2016-02-25
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多