找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24137|回复: 3

[文件操作] 【已解决】求助批处理从一堆XML中提取关键词写到csv中

[复制链接]
发表于 2024-3-22 19:24:44 | 显示全部楼层 |阅读模式
本帖最后由 zhengwei007 于 2024-3-23 10:22 编辑

我有一堆XML文件,想从这些文件中找两个ID直接取值,里面内容有多有少,代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/skills.xsd">
  3.         <skill id="1201" levels="33" name="Dryad Root" enchantGroup1="1" enchantGroup2="1">
  4.                 <table name="#effectPoints"> -227 -235 -243 -268 -277 -285 -313 -322 -331 -360 -369 -379 -399 -408 -418 -438 -448 -457 -477 -486 -495 -514 -523 -532 -549 -566 -582 -597 -611 -624 -635 -646 -655 </table>
  5.                 <table name="#magicLvl"> 23 24 25 28 29 30 33 34 35 38 39 40 42 43 44 46 47 48 50 51 52 54 55 56 58 60 62 64 66 68 70 72 74 </table>
  6.                 <table name="#mpConsume"> 17 17 18 20 21 21 23 24 24 27 27 28 30 30 31 33 34 35 36 37 38 39 40 41 43 44 46 48 49 51 52 53 55 </table>
  7.                 <table name="#mpInitialConsume"> 5 5 5 5 6 6 6 6 6 7 7 7 8 8 8 9 9 9 9 10 10 10 10 11 11 11 12 12 13 13 13 14 14 </table>
  8.                 <table name="#ench1ActivateRates"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
  9.                 <table name="#ench1Power"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
  10.                 <table name="#ench2AbnormalTimes"> 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 </table>
  11.                 <table name="#ench2mpConsume"> 54 53 52 50 50 49 48 46 46 45 44 44 42 42 41 40 38 38 37 36 34 34 33 33 32 30 30 29 28 26 </table>
  12.                 <table name="#ench2mpInitialConsume"> 13 13 13 13 12 12 12 12 11 11 11 11 11 10 10 10 10 9 9 9 9 8 8 8 8 8 7 7 7 7 </table>
  13.                 <table name="#enchMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 </table>
  14.                 <set name="abnormalLvl" val="1" />
  15.                 <set name="abnormalTime" val="30" />
  16.                 <set name="abnormalType" val="ROOT_MAGICALLY" />
  17.                 <set name="abnormalVisualEffect" val="ROOT" />
  18.                 <set name="activateRate" val="80" />
  19.                 <set name="basicProperty" val="MEN" />
  20.                 <set name="castRange" val="600" />
  21.                 <set name="effectPoint" val="#effectPoints" />
  22.                 <set name="effectRange" val="1100" />
  23.                 <set name="hitTime" val="2500" />
  24.                 <set name="icon" val="icon.skill1201" />
  25.                 <set name="isDebuff" val="true" />
  26.                 <set name="isMagic" val="1" /> <!-- Magic Skill -->
  27.                 <set name="lvlBonusRate" val="2" />
  28.                 <set name="magicLvl" val="#magicLvl" />
  29.                 <set name="mpConsume" val="#mpConsume" />
  30.                 <set name="mpInitialConsume" val="#mpInitialConsume" />
  31.                 <set name="operateType" val="A2" />
  32.                 <set name="power" val="80" /> <!-- Base Land Rate -->
  33.                 <set name="reuseDelay" val="2000" />
  34.                 <set name="targetType" val="ONE" />
  35.                 <set name="trait" val="HOLD" />
  36.                 <enchant1 name="activateRate" val="#ench1ActivateRates" />
  37.                 <enchant1 name="magicLvl" val="#enchMagicLvl" />
  38.                 <enchant1 name="power" val="#ench1Power" />
  39.                 <enchant2 name="abnormalTime" val="#ench2AbnormalTimes" />
  40.                 <enchant2 name="magicLvl" val="#enchMagicLvl" />
  41.                 <enchant2 name="mpConsume" val="#ench2mpConsume" />
  42.                 <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume" />
  43.                 <for>
  44.                         <effect name="Root" />
  45.                 </for>
  46.         </skill>
  47.         <skill id="4500" levels="1" name="Treasure Chest - Level 27">
  48.                 <!-- This Skill Is Only For Description In The Client -->
  49.                 <set name="icon" val="icon.skill0042" />
  50.                 <set name="magicLvl" val="1" />
  51.                 <set name="operateType" val="P" />
  52.                 <set name="targetType" val="SELF" />
  53.         </skill>
  54. </list>
复制代码
根据以上代码,我只要两个字段,一个是skill id,一个是set name="icon"后面的val中的内容,标题我自己写,导出效果如下:

  1. skillid        icon
  2. 1201        icon.skill1201
  3. 4500        icon.skill0042
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-3-23 09:19:21 | 显示全部楼层
回复 1# zhengwei007
第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方式如下:

  1. gawk -F"\042" -v"OFS=\t" "BEGIN{print"skillid\ticon"}/<skill id=/,/<\/skill>/{if(/<skill id=/){b=$2}if(/<set name=/&&$2~/^icon$/){print b,$4}}" *.xml>out.csv
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-3-23 10:22:11 | 显示全部楼层
回复  zhengwei007
第3方工具gawk(  )的实现方式如下:
hfxiang 发表于 2024-3-23 09:19



谢谢老铁!太强了!
发表于 2024-3-26 16:01:59 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,3,5 delims==         " %%i in ('findstr /c:"skill id" /c:""icon"" a.txt') do (
  4.     if /i "%%i"=="<skill" (
  5.         set str=%%~j
  6.     ) else (
  7.         echo,!str!        %%~k
  8.     )
  9. )
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:10 , Processed in 0.010561 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表