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

第一个for循环主要是排除不含Soul Crystal的xml文件。
变量延迟加在合适的位置即可:
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /m /c:"Soul Crystal" *.xml') do (
  3.     for /f "tokens=1,3,4" %%a in ('type "%%i"') do (
  4.         if "%%a"=="<item>" (
  5.             set x=true
  6.         ) else if "%%a"=="</item>" (
  7.             set x=
  8.             setlocal enabledelayedexpansion
  9.             for /f "tokens=2 delims==" %%d in ("!str1!") do echo,!str2!,%%~d
  10.             endlocal
  11.         ) else if defined x (
  12.             if "%%b%%c"=="SoulCrystal" (
  13.                 set y=true
  14.             ) else if defined y (
  15.                 set y=
  16.                 for /f "tokens=2 delims==" %%d in ("%%b") do set str2=%%~d
  17.             )
  18.             set str1=%%b
  19.         )
  20.     )
  21. ))>out.csv
  22. pause
复制代码
1

评分人数

    • 77七: 感谢分享,findstr用法学习了!技术 + 1

TOP

受10楼代码启示,这样应当在逻辑上更容易理解些:
1.找出"Soul Crystal"和"</item>"所在的行数;
2.根据第1条找出数据所在行的行数,并随后对这些行进行处理,得到所需ID数值。
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /m /c:"Soul Crystal" *.xml') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "tokens=1,2 delims=: " %%j in ('findstr /ilnc:"Soul Crystal" /inc:"</item>" "%%i"') do (
  5.         set n=%%j
  6.         if "%%k"=="</item>" (
  7.             set /a n-=1
  8.             set _!n!=true
  9.         ) else (
  10.             set /a n+=1
  11.             set #!n!=true
  12.         )
  13.     )
  14.     for /f "tokens=1,4 delims=: " %%a in ('findstr /n .* "%%i"') do (
  15.         if defined #%%a (
  16.             for /f "tokens=2 delims==" %%c in ("%%b") do set "str=%%~c"
  17.         ) else if defined _%%a (
  18.             for /f "tokens=2 delims==" %%c in ("%%b") do echo,!str!,%%~c
  19.         )
  20.     )
  21.     endlocal
  22. ))>out.csv
  23. pause
复制代码

TOP

返回列表