[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a p=p1=p2=p3=p4=p5=0
  3. (for /f "tokens=1* delims=-" %%a in (a.txt) do (
  4.   set /a 1/%%a 2>nul&&set "str=%%a-%%b"||(
  5.     for /f "tokens=1* delims=、" %%c in ("%%a") do (
  6.       set /a 1/%%c 2>nul&&set /a p4+=100,p5=0||(
  7.         if not "%%d"=="" (
  8.           set /a p2+=1000000,p3=p4=p5=0
  9.         ) else (
  10.           for /f "tokens=1,2 delims=)" %%e in ("%%a") do (
  11.             set /a 1/%%e 2>nul&&set /a p5+=1||(
  12.               if not "%%f"=="" (
  13.                 set /a p3+=10000,p4=p5=0
  14.               ) else (
  15.                 set /a p1+=100000000,p2=p3=p4=p5=0
  16.               )
  17.             )
  18.           )
  19.         )
  20.       )
  21.     )
  22.     set /a p=!p1!+!p2!+!p3!+!p4!+!p5!
  23.     set "str=0!p!_%%a"
  24.   )
  25.   echo,!str!
  26. ))>b.txt
复制代码
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 xxpinqz 于 2013-5-27 22:46 编辑

只测了你举的例子,没测压缩包的,所以注意下:
后两句FOR中的delims=、和delims=)是全角字符

供参考,自个儿看的都有点头大。。。
大体思路:
p1-p5分别代表第几个层次
先用-号分割,如果第一列是纯数字则直接输出;(日期开头的行)
             如果非纯数字:再用、和)进行分割,如果第二列为空,则为p1 (宪法。。。)
                                          如果不为空则分别判断第一列是否为纯数字,然后分别记为p4,p2,p5,p3
定义完某一层次的序号后同时清除之后层次的数值
最后定义出前缀p及str
第一序列不能超过21个,其他子项不能超99个
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 5# pan528
原来觉得用for直接分割比较快点,没考虑到同时出现、)的情况,稍微改下。不过还是有致命伤的,你还是6楼的代码。
怎么就没想到分成两位数在组合起来呢~~
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a p=p1=p2=p3=p4=p5=0
  3. (for /f "tokens=1* delims=-" %%a in (a.txt) do (
  4.   set "str=%%a"
  5.   set /a 1/%%a 2>nul&&set "str=%%a-%%b"||(
  6.     for /f "tokens=1* delims=、" %%c in ("!str:~,5!") do (
  7.       set /a 1/%%c 2>nul&&set /a p4+=100,p5=0||(
  8.         if not "%%d"=="" (
  9.           set /a p2+=1000000,p3=p4=p5=0
  10.         ) else (
  11.           for /f "tokens=1* delims=)" %%e in ("!str:~,5!") do (
  12.             set /a 1/%%e 2>nul&&set /a p5+=1||(
  13.               if not "%%f"=="" (
  14.                 set /a p3+=10000,p4=p5=0
  15.               ) else (
  16.                 set /a p1+=100000000,p2=p3=p4=p5=0
  17.               )
  18.             )
  19.           )
  20.         )
  21.       )
  22.     )
  23.     set /a p=p1+p2+p3+p4+p5
  24.     set "str=0!p!_%%a"
  25.   )
  26.   echo,!str!
  27. ))>b.txt
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

返回列表