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

[文本处理] 【已解决】批处理如何自动生成十位数的序列号?

如何自动生成十位数的序列号

有一菜单文本,有五级目录:
第一级:宪法、刑法、民商法、经济法、社会法 ...
第二级:序号:一、二、三、四、五 ...
第三级:序号:(一)(二)(三)(四)(五)...
第四级:序号:1、2、3、4、5、 ...
第五级:序号:1)2)3)4)5) ...
每级用两位数字表示,如何自动生成十位数的序列号?

生成前,如下:
[attach]6394[/attach]
宪法
一、宪法与修正案
2004-03-14_中华人民共和国宪法(2004修正)
1982-12-04_中华人民共和国宪法(1982)
1988-04-12_中华人民共和国宪法修正案(1988)
1993-03-29_中华人民共和国宪法修正案(1993)
1999-03-15_中华人民共和国宪法修正案(1999)
2004-03-14_中华人民共和国宪法修正案(2004)
二、与宪法相关法
(一)立法与监督
1、立法法
2000-07-01_中华人民共和国立法法(2000)
1985-04-10_全国人民代表大会关于授权国务院在经济体制改革和对外开放方面可以制定暂行的规定或者条例的决定
1996-04-26_全国人民代表大会常务委员会法制工作委员会关于地方性法规对法律中没有规定的行政处罚行为可否作出补充规定问题的答复
1996-11-08_全国人民代表大会常务委员会法制工作委员会关于如何掌握地方性法规清理标准问题的答复
2000-10-19_全国人大常委会法制工作委员会关于省人大能否对全省地方立法工作程序进行统一规定的答复
2000-11-20_全国人民代表大会常务委员会法制工作委员会关于制定法律、法规条件不成熟能否先制定部门规章,涉及外交、外贸政策的部门规章能否不向社会公开的答复
2000-12-28_全国人民代表大会常务委员会法制工作委员会关于地方人民法院、人民**能否提出地方性法规案的答复
2、法律的修改与废止
2009-08-27_全国人民代表大会常务委员会关于修改部分法律的决定(2009)
2009-06-27_全国人民代表大会常务委员会关于废止部分法律的决定(2009)
3、监督法
2007-01-01_中华人民共和国各级人民代表大会常务委员会监督法(2006)
(二)组织法与选举法
1、组织法
1982-12-10_中华人民共和国全国人民代表大会组织法(1982)
2004-10-27_中华人民共和国地方各级人民代表大会和地方各级人民**组织法(2004修正)
1982-12-10_中华人民共和国国务院组织法(1982)
2007-01-01_中华人民共和国人民法院组织法(2006修正)
1983-09-02_中华人民共和国人民**组织法(1983修正)
1990-01-01_中华人民共和国城市居民委员会组织法(1989)
1998-11-04_中华人民共和国村民委员会组织法(2010修订)
2、选举法
2010-03-14_中华人民共和国全国人民代表大会和地方各级人民代表大会选举法(2010修正)
1983-03-05_全国人民代表大会常务委员会关于县级以下人民代表大会代表直接选举的若干规定
3、代表法
2010-10-28_中华人民共和国全国人民代表大会和地方各级人民代表大会代表法(2010修正)
2004-10-27_全国人民代表大会常务委员会关于县、乡两级人民代表大会代表选举时间的决定(2004)
2012-06-30_中国人民解放军选举全国人民代表大会和县级以上地方各级人民代表大会代表的办法(2012修正)
...

生成后:

0100000000_宪法
0101000000_一、宪法与修正案
2004-03-14_中华人民共和国宪法(2004修正)
1982-12-04_中华人民共和国宪法(1982)
1988-04-12_中华人民共和国宪法修正案(1988)
1993-03-29_中华人民共和国宪法修正案(1993)
1999-03-15_中华人民共和国宪法修正案(1999)
2004-03-14_中华人民共和国宪法修正案(2004)
0102000000_二、与宪法相关法
0102010000_(一)立法与监督
0102010100_1、立法法
2000-07-01_中华人民共和国立法法(2000)
1985-04-10_全国人民代表大会关于授权国务院在经济体制改革和对外开放方面可以制定暂行的规定或者条例的决定
1996-04-26_全国人民代表大会常务委员会法制工作委员会关于地方性法规对法律中没有规定的行政处罚行为可否作出补充规定问题的答复
1996-11-08_全国人民代表大会常务委员会法制工作委员会关于如何掌握地方性法规清理标准问题的答复
2000-10-19_全国人大常委会法制工作委员会关于省人大能否对全省地方立法工作程序进行统一规定的答复
2000-11-20_全国人民代表大会常务委员会法制工作委员会关于制定法律、法规条件不成熟能否先制定部门规章,涉及外交、外贸政策的部门规章能否不向社会公开的答复
2000-12-28_全国人民代表大会常务委员会法制工作委员会关于地方人民法院、人民**能否提出地方性法规案的答复
0102010200_2、法律的修改与废止
2009-08-27_全国人民代表大会常务委员会关于修改部分法律的决定(2009)
2009-06-27_全国人民代表大会常务委员会关于废止部分法律的决定(2009)
0102010300_3、监督法
2007-01-01_中华人民共和国各级人民代表大会常务委员会监督法(2006)
0102020000_(二)组织法与选举法
0102020100_1、组织法
1982-12-10_中华人民共和国全国人民代表大会组织法(1982)
2004-10-27_中华人民共和国地方各级人民代表大会和地方各级人民**组织法(2004修正)
1982-12-10_中华人民共和国国务院组织法(1982)
2007-01-01_中华人民共和国人民法院组织法(2006修正)
1983-09-02_中华人民共和国人民**组织法(1983修正)
1990-01-01_中华人民共和国城市居民委员会组织法(1989)
1998-11-04_中华人民共和国村民委员会组织法(2010修订)
0102020200_2、选举法
2010-03-14_中华人民共和国全国人民代表大会和地方各级人民代表大会选举法(2010修正)
1983-03-05_全国人民代表大会常务委员会关于县级以下人民代表大会代表直接选举的若干规定
0102020300_3、代表法
2010-10-28_中华人民共和国全国人民代表大会和地方各级人民代表大会代表法(2010修正)
2004-10-27_全国人民代表大会常务委员会关于县、乡两级人民代表大会代表选举时间的决定(2004)
2012-06-30_中国人民解放军选举全国人民代表大会和县级以上地方各级人民代表大会代表的办法(2012修正)
1

评分人数

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

我建议你把要处理的东西做个样本打包传上来,特别是目录结构。

TOP

  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

本帖最后由 pan528 于 2013-5-27 23:34 编辑

回复 4# xxpinqz

感谢回帖!思路很巧妙!
但,生成的文本从第五级目录的第二个数字开始出错;导致整体出错,以a.rar为例,出错200多处。。。
可能是贴上的例子造成的。
我没有看明白,还没有找到原因,请楼上帮助解决一下。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a a=b=c=d=e=100
  3. (for /f "delims=" %%i in (a.txt) do (
  4.     set str=%%i&set t=!str:~,10!
  5.     for /l %%j in (0 1 9) do set t=!t:%%j=!
  6.         if "!t!" == "--" (echo;%%i) else (
  7.            if "!t:~,1!" == "、" (
  8.               set /a d+=1,e=100
  9.            ) else if "!t:~,1!" == ")" (
  10.                   set /a "e+=1"
  11.              ) else (
  12.                for %%j in (一 二 三 四 五 六 七 八 九 十) do set t=!t:%%j=!
  13.                if "!t:~,1!" == "、" (
  14.                   set /a "b+=1,c=d=e=100"
  15.                ) else if "!t:~,2!" == "()" (
  16.                          set /a "c+=1,d=e=100"
  17.                       ) else set /a "a+=1,b=c=d=e=100"
  18.             )
  19.         echo !a:~-2!!b:~-2!!c:~-2!!d:~-2!!e:~-2!_%%i
  20.    )
  21. ))>b.txt
  22. pause
复制代码
1

评分人数

TOP

回复 6# terse

高手啊,通过全部测试!谢谢!
好好学习、学习!

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

回复 6# terse

六楼的思路更简洁:分别用过滤阿拉伯数字和汉字数字的方法,锁定第二级到第五级目录及子项主文;剩下的情况即为第一级目录了。实在是妙啊!

TOP

回复 8# xxpinqz

谢谢修改,已通过测试。

TOP

返回列表