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

楼主的几轮帖子把纯P的for/f切割器开出刃来了...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f tokens^=1-10^ delims^=^ ^=^<^" %%a in (' findstr "=" "1.xml" ') do (
  3. if /i "%%a"=="skillTree type" (set "v1=%%d")
  4. if /i "%%a"=="skill skillName" (
  5. if defined v (echo,)
  6. set "v=!v1! %%b %%d %%f %%h"
  7. if /i "%%j" neq "true" (set "v=!v! %%j")
  8. set/p="!v!"<nul)
  9. if /i "%%a"=="item id" (echo, %%b %%d&set "v=")
  10. ))>"sour.csv"
  11. endlocal&exit/b
复制代码

TOP


再换一种纯P老刀的切法,顺便复习一遍 if 句式中如何比较双引号"的方法...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "tokens=1* delims= < " %%a in (' findstr "=" "1.xml" ') do (
  3. if /i "%%~a"=="skillTree" for /f tokens^=1-4^ delims^=^" %%1 in ("%%~b") do (set "v1=%%4")
  4. if /i "%%~a"=="skill" (
  5. if defined v (echo,)
  6. set "v=!v1!" & for %%i in (%%~b) do (
  7. set i=%%i &set "c=!i:~,1!"
  8. if ^!c!==^" if /i "!i:~1,4!" neq "true" set "v=!v! !i:~1,-2!")
  9. set/p="!v!"<nul
  10. )
  11. if /i "%%~a"=="item" for /f tokens^=1-4^ delims^=^" %%1 in ("%%~b") do (echo, %%2 %%4&set "v=")
  12. ))>"sour.csv"
  13. endlocal&exit/b
复制代码

TOP


用jscript在纯P壳里跑一遍,处理大数据应会有明显效率差别
以下代码存为test.bat运行,结果生成与源文件 1.xml (一楼示例样本)对应的 sour.csv
  1. @set @v=1 /* @echo off & type "1.xml"|cscript /e:jscript "%~f0">"sour.csv" &exit/b
  2. */
  3. var lines = WSH.stdin.readall().split('\n');
  4. var v1, v, tk, tk0, ltk, vLines = [];
  5. for (var n=0,l=lines.length; n<l; n++) {
  6. if (lines[n].indexOf('=') == -1) continue;
  7. tk = lines[n].split(/[\t=<]+/); ltk = tk.length; tk0 = tk[0].toLowerCase();
  8. if (tk0 == 'skilltree type') v1 = tk[2].split(/"+/)[0];
  9. else if (tk0 == 'skill skillname') {
  10. v = v1;
  11. for (var k=1; k<ltk; k++)
  12. if (tk[k].slice(0,1) == '\"' && tk[k].slice(1,5).toLowerCase() != 'true')
  13. v += '\t'+tk[k].split(/"+/)[0];
  14. vLines.push(v);
  15. } else if (tk0 == 'item id') {
  16. v += '\t'+tk[1].split(/"+/)[0]+'\t'+tk[2].split(/"+/)[0]; vLines.pop(); vLines.push(v);
  17. }
  18. }
  19. WSH.echo(vLines.join('\n'));
复制代码

TOP

返回列表