[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 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

评分人数

TOP

回复  zhengwei007
第3方工具gawk(  )的实现方式如下:
hfxiang 发表于 2024-3-23 09:19



谢谢老铁!太强了!

TOP

  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

评分人数

TOP

返回列表