Board logo

标题: [文件操作] 【已解决】资料分类,批处理如何在文件名前加关键字? [打印本页]

作者: qd2024    时间: 2024-1-6 08:06     标题: 【已解决】资料分类,批处理如何在文件名前加关键字?

本帖最后由 qd2024 于 2024-1-10 06:42 编辑

链接:https://pan.baidu.com/s/1N-mqE0Oea6jG3XFLY-CWKw?pwd=2zmo
提取码:2zmo
--来自百度网盘超级会员V10的分享

收集到一些资料(不限文件扩展名),想用批处理进行一下分类,

举例,当某个文件的文件名中包含关键字“化学”“九上”时,最就是这个文件的文件名前插入【化学9A】,原文件名不变。

第一学期、上学期、上册,对应字母A
第二学期、下学期、下册,对应字母B

如,2023-2024辽宁协作体九上期末化学含答案.pdf     调整后为【化学9A】 2023-2024辽宁协作体九上期末化学含答案.pdf



设想1:在批处理文件的前端有一段代码,然后在这段代码的下面空一行后,是关键字信息。

     
====代码部分=====

科目关键字:语文、数学、物理、化学、历史、政治、生物、地理、英语

年级关键字:一、二、三、四、五、六、七、八、九、1、2、3、4、5、6、7、8、9

册数关键字:年上,第一学期,上学期,上册=A    年下,第二学期,下学期,下册=B

当文件名中有“语文”“九”“年上”时,就在文件名前插入“【语文9A】”
当文件名中有“化学”“九”“第二学期”时,就在文件名前插入“【化学9B】”

其他不变

如,2023-2024辽宁实验中学九上期末语文测试卷.pdf     调整后为【语文9A】 2023-2024辽宁实验中学九上期末语文测试卷.pdf

科目、年级、册数关键字会有后期还会根据实际情况补充

注意:处理里,要忽略文件中大于9的数,这部分数一般都是年份,如果参与判断就都乱了,

谢谢
作者: 77七    时间: 2024-1-6 15:58

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. set t1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法
  5. set t2=一 二 三 四 五 六 七 八 九 1 2 3 4 5 6 7 8 9
  6. set /a 一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9
  7. set t3=年上 第一学期 上学期 上册 上期
  8. set t4=年下 第二学期 下学期 下册 下期
  9. rem 排除关键字
  10. set t5=二零一九 二零二零
  11. for /f "delims=" %%i in ('dir /b /a-d ^|find /v "%~nx0"') do (
  12. set str=%%i
  13. set _str=%%i
  14. setlocal enabledelayedexpansion
  15. rem 排除关键字
  16. for /l %%l in (2000,1,2050) do (
  17. set "_str=!_str:%%l=!"
  18. )
  19. for /l %%l in (10,1,99) do (
  20. set "_str=!_str:%%l=!"
  21. )
  22. for %%a in (%t5%) do (
  23. set "_str=!_str:%%a=!"
  24. )
  25. for %%a in (%t1%) do (
  26. echo !_str!|find "%%a" 1>nul && set m1=%%a
  27. )
  28. for %%a in (%t2%) do (
  29. echo !_str!|find "%%a" 1>nul && (
  30. if defined %%a (
  31. set m2=!%%a!
  32. ) else (
  33. set m2=%%a
  34. )
  35. )
  36. )
  37. for %%a in (%t3%) do (
  38. echo !_str!|find "%%a" 1>nul && set m3=A
  39. )
  40. for %%a in (%t4%) do (
  41. echo !_str!|find "%%a" 1>nul && set m3=B
  42. )
  43. echo ren "!str!" "【!m1!!m2!!m3!】!str!"
  44. ren "!str!" "【!m1!!m2!!m3!】!str!"
  45. endlocal
  46. )
  47. pause
复制代码

作者: qd2024    时间: 2024-1-7 17:54

本帖最后由 qd2024 于 2024-1-7 18:04 编辑

回复 2# 77七


    辛苦了 谢谢
如果文件名中 有“中考”    我想把插入的【科目·中考】   能再帮我调整一下吗  万分感谢

如,2023-2024辽宁协作体中考化学模拟测试.pdf     调整后为【化学·中考】2023-2024辽宁协作体中考化学模拟测试.pdf


另外能不能再帮我限定一下扩展名,只有指定的扩展名,才处理 如*.dcox  *.pdf   我之前没考虑全  把一些其他文件也处理


2023年12月沈阳和平区九上历史期末试卷+答案      这个文件不知道是什么原因   改成了   【历史9】2023年12月沈阳和平区九上历史期末试卷+答案    没有A

还想在【历史9A】后面插入当前的4位系统日期,插入后,  上面的例子就变成了     【化学·中考】【0107】2023-2024辽宁协作体中考化学模拟测试.pdf  
                                                                                                           【历史9】【0107】2023年12月沈阳和平区九上历史期末试卷+答案   
【0107】是1月7日
  
添麻烦了
作者: 77七    时间: 2024-1-7 19:31

2023年12月沈阳和平区九上历史期末试卷+答案

t3中没有 上 或者 九上 关键词,需要自己添加

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f %%i in ('powershell -c "Get-Date -uformat '%%m%%d'"') do (
  5. set "Today=%%i"
  6. )
  7. set t1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法
  8. set t2=一 二 三 四 五 六 七 八 九 1 2 3 4 5 6 7 8 9
  9. set /a 一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9
  10. set t3=年上 第一学期 上学期 上册 上期
  11. set t4=年下 第二学期 下学期 下册 下期
  12. set t6=中考 高考
  13. set t7=*.doc *.pdf
  14. rem 排除关键字
  15. set t5=二零一九 二零二零
  16. for /f "delims=" %%i in ('dir /b /a-d %t7% ^|findstr /rvbc:"【.*】【[0-9][0-9]*】"') do (
  17. set str=%%i
  18. set _str=%%i
  19. setlocal enabledelayedexpansion
  20. rem 排除关键字
  21. for /l %%l in (2000,1,2050) do (
  22. set "_str=!_str:%%l=!"
  23. )
  24. for /l %%l in (10,1,99) do (
  25. set "_str=!_str:%%l=!"
  26. )
  27. for %%a in (%t5%) do (
  28. set "_str=!_str:%%a=!"
  29. )
  30. for %%a in (%t1%) do (
  31. echo !_str!|find "%%a" 1>nul && set m1=%%a
  32. )
  33. for %%a in (%t6%) do (
  34. echo !_str!|find "%%a" 1>nul && (
  35. set m2=·
  36. set m3=%%a
  37. )
  38. )
  39. if not defined m2 (
  40. for %%a in (%t2%) do (
  41. echo !_str!|find "%%a" 1>nul && (
  42. if defined %%a (
  43. set m2=!%%a!
  44. ) else (
  45. set m2=%%a
  46. )
  47. )
  48. )
  49. )
  50. if not defined m3 (
  51. for %%a in (%t3%) do (
  52. echo !_str!|find "%%a" 1>nul && set m3=A
  53. )
  54. if not defined m3 (
  55. for %%a in (%t4%) do (
  56. echo !_str!|find "%%a" 1>nul && set m3=B
  57. )
  58. )
  59. )
  60. echo ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  61. ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  62. endlocal
  63. )
  64. pause
复制代码

作者: qd2024    时间: 2024-1-7 19:41

回复 4# 77七


    好的  t3 中如果 加入 上或九上 逻辑上会不乱  我之前自己加一个 “上“ 但是代码没有判断出来
作者: qixiaobin0715    时间: 2024-1-8 10:11

本帖最后由 qixiaobin0715 于 2024-1-8 11:11 编辑

回复 5# qd2024
关键词最好不存在干扰项,如果你把“上”作为关键词,有些文件可能会产生判断上的混乱,比如文件名中含有“上海,上饶,上虞...”等。

关于关键词的选取应当遵循以下原则:
1.所有关键词不要有包含关系,可以存在“上学期”和“上期”,而不能存在“上”和“上期”;
2.在文件名中也不能存在两个关键词,比如文件名为“2023-2024上海实验中学九下期末语文测试卷.pdf ”,不能取“上”“下”作为关键词;在这里年级关键词可取“一年”“一上”...“九年”“九上”等,册数关键词可取“上学期”“上期”“第一学期”等,选取关键词尽量与其它字符区别开,保证关键词能够匹配准确的信息;
3.观察你提供的文件,相连无关数字个数均为2位或4位,屏蔽无关数字产生的干扰时,可以根据2楼去除01、02、03...09以及10——99这些数字。
作者: qixiaobin0715    时间: 2024-1-8 16:10

本帖最后由 qixiaobin0715 于 2024-1-8 16:50 编辑

代码说明:
1.所谓“关键词”的选取原则。将所有关键词设置在一个变量中,之间用空格分开。如果在前缀中某关键词保持不变,则在变量中原样照抄,如“语文 数学”等;关键词与前缀只是有关联,则以“关键词-关联字符”的形式写在变量中;关键词跨2个区域,如“九上”涉及年级和册数,则按照关联字符的固有顺序分隔符后面加上2个关联字符;如果已存在2个关联字符,则不应在后面重复设置关联字符,比如要处理的文件名有“2023-2024辽宁协作体九上期末化学含答案.pdf”,已存在“九上-9A”,就不再设置文件名中存在的“上期”作为关键词(“上期-A”),否则前缀会出现重复现象(化学9AA);关键词变量要按照前缀顺序排列,先科目,再年级,最后册数;
2.未看到楼主1-9数字作为关键词的样本,所以关键词未做涉及;
3.从楼主提供的样本来看,数字干扰项为2位或4位,代码中11、12行也进行了处理。
4.下面代码关键字只是列出了样本中涉及的情况,为了清楚起见稍作扩展,楼主可按照上面的说明的规则自行添加。
5.代码只是显示了修改后的文件名,未做重命名操作,如果显示无误,可修改代码第26行echo,[!str2!]%%i,修改为“ren "%%i" "[!str2!]%%i"”即可。
  1. @echo off
  2. set ConWords=各学科 语文 数学 物理 化学 历史 英语 道法 一上-1A 九上-9A 一下-1B 九下-9B 一年-1 九年-9 上学期-A 第一学期-A 下学期-B
  3. for /f "delims=" %%i in ('dir /b /a-d') do (
  4.     set str1=%%i
  5.     setlocal enabledelayedexpansion
  6.     for %%j in (00 01 02 03 04 05 06 07 08 09) do set str1=!str1:%%j=!
  7.     for /l %%j in (10,1,99) do set str1=!str1:%%j=!
  8.     for %%j in (%ConWords%) do (
  9.         for /f "tokens=1,2 delims=-" %%a in ("%%j") do (
  10.             if not "!str1!"=="!str1:%%a=!" (
  11.                 if "%%b"=="" (
  12.                     set str2=!str2!%%a
  13.                 ) else (
  14.                     set str2=!str2!%%b
  15.                 )
  16.             )
  17.         )
  18.     )
  19.     if defined str2 echo,[!str2!]%%i
  20.     endlocal
  21. )
  22. pause
复制代码
如果关键词过多,可以按照代码中关键词变量的规则把它们写入一个文本文件中,便于增减,文本文件中一个关键词一行,顺序同上,即:先科目,再年级,最后册数。只不过要修改一下代码第8行,读入文本即可。
作者: qd2024    时间: 2024-1-8 22:33

本帖最后由 qd2024 于 2024-1-8 23:50 编辑

回复 7# qixiaobin0715


    真的十分感谢  比我想得还要全面
作者: qd2024    时间: 2024-1-8 23:29

本帖最后由 qd2024 于 2024-1-8 23:50 编辑

回复 2# 77七


①语文福利:说明+非连阅读·九下一模二模真题汇编.pdf     想处理为    【语文9B·一模二模】【0108】语文福利:说明+非连阅读·九下一模二模真题汇编.pdf
②语文福利:作文·一模二模作文真题汇编.pdf                 想处理为                   【语文9B·一模二模】【0108】语文福利:作文·一模二模作文真题汇编.pdf   
③语文题库:记叙文阅读·中考真题汇编专题01.pdf     【语文9B·中考】【0108】语文题库:记叙文阅读·中考真题汇编专题01.pdf

就是说  文件名中如果能转成9B就先提取9B   然后加一模 二模 三模 中考 (文件名中有几个就加几个)如①
          文件名中如果没有能转成9B的关键词  便加上9B·    变成  【语文9B·一模】【语文9B·一模二模】如② ③

先不考虑   高考  高考对应的是12B   但是和一模二模三模 会乱了 先忽略吧
set t6=中考 高考    在t6中改吧

下面是新文件 参考  谢谢
链接:https://pan.baidu.com/s/1hwbzjNZCCW8vuE5zrrn-Gg?pwd=uead
提取码:uead
--来自百度网盘超级会员V10的分享

代码有改 如果没有影响就在下面的基础上 帮我修改 谢谢
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f %%i in ('powershell -c "Get-Date -uformat '%%m%%d'"') do (
  5. set "Today=%%i"
  6. )
  7. set t1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法
  8. set t2=一 二 三 四 五 六 七 八 九 1 2 3 4 5 6 7 8 9
  9. set /a 一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9
  10. set t3=第一学期 上学期 上册 上期 上
  11. set t4=第二学期 下学期 下册 下期 下
  12. set t6=中考 高考
  13. set t7=*.doc *.pdf
  14. rem 排除关键字
  15. set t5=期中考试 二零二四 二零二三 二零二三 二零二一 二零二零 二零一九 二零一八 二零一七 二零一六 二零一五 二零一四  二零一三 二零一二 二零一一 二零一零
  16. for /f "delims=" %%i in ('dir /b /a-d %t7% ^|findstr /rvbc:"【.*】【[0-9][0-9]*】"') do (
  17. set str=%%i
  18. set _str=%%i
  19. setlocal enabledelayedexpansion
  20. rem 排除关键字
  21. for /l %%l in (2000,1,2050) do (
  22. set "_str=!_str:%%l=!"
  23. )
  24. for /l %%l in (10,1,99) do (
  25. set "_str=!_str:%%l=!"
  26. )
  27. for %%a in (%t5%) do (
  28. set "_str=!_str:%%a=!"
  29. )
  30. for %%a in (%t1%) do (
  31. echo !_str!|find "%%a" 1>nul && set m1=%%a
  32. )
  33. for %%a in (%t6%) do (
  34. echo !_str!|find "%%a" 1>nul && (
  35. set m2=·
  36. set m3=%%a
  37. )
  38. )
  39. if not defined m2 (
  40. for %%a in (%t2%) do (
  41. echo !_str!|find "%%a" 1>nul && (
  42. if defined %%a (
  43. set m2=!%%a!
  44. ) else (
  45. set m2=%%a
  46. )
  47. )
  48. )
  49. )
  50. if not defined m3 (
  51. for %%a in (%t3%) do (
  52. echo !_str!|find "%%a" 1>nul && set m3=A
  53. )
  54. if not defined m3 (
  55. for %%a in (%t4%) do (
  56. echo !_str!|find "%%a" 1>nul && set m3=B
  57. )
  58. )
  59. )
  60. echo ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  61. ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  62. endlocal
  63. )
  64. pause
复制代码

作者: 77七    时间: 2024-1-9 11:49

回复 9# qd2024


   上 和 下 单独作为关键词,可能需要排除一些,不如直接列举一下 七上...
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. cd /d "%~dp0"
  4. for /f %%i in ('powershell -c "Get-Date -uformat '%%m%%d'"') do (
  5. set "Today=%%i"
  6. )
  7. set t1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法
  8. set t2=一 二 三 四 五 六 七 八 九 1 2 3 4 5 6 7 8 9
  9. set /a 一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9
  10. set t3=第一学期 上学期 上册 上期 七上 八上 九上
  11. set t4=第二学期 下学期 下册 下期 七下 八下 九下
  12. set t6=中考 一模 二模 三模
  13. set t7=*.doc *.pdf
  14. rem 排除关键字
  15. set t5=期中考试 二零二四 二零二三 二零二三 二零二一 二零二零 二零一九 二零一八 二零一七 二零一六 二零一五 二零一四  二零一三 二零一二 二零一一 二零一零 01 02 03 04 05 06 07 08 09
  16. for /f "delims=" %%i in ('dir /b /a-d %t7% ^|findstr /rvbc:"【.*】【[0-9][0-9]*】"') do (
  17. set str=%%i
  18. set _str=%%i
  19. setlocal enabledelayedexpansion
  20. rem 排除关键字
  21. for /l %%l in (2000,1,2050) do (
  22. set "_str=!_str:%%l=!"
  23. )
  24. for /l %%l in (10,1,99) do (
  25. set "_str=!_str:%%l=!"
  26. )
  27. for %%a in (%t5%) do (
  28. set "_str=!_str:%%a=!"
  29. )
  30. for %%a in (%t1%) do (
  31. echo !_str!|find "%%a" 1>nul && set m1=%%a
  32. )
  33. for %%a in (%t6%) do (
  34. echo !_str!|find "%%a" 1>nul && (
  35. set m2=9B·
  36. set m3=!m3!%%a
  37. )
  38. )
  39. if not defined m2 (
  40. for %%a in (%t2%) do (
  41. echo !_str!|find "%%a" 1>nul && (
  42. if defined %%a (
  43. set m2=!%%a!
  44. ) else (
  45. set m2=%%a
  46. )
  47. )
  48. )
  49. )
  50. if not defined m3 (
  51. for %%a in (%t3%) do (
  52. echo !_str!|find "%%a" 1>nul && set m3=A
  53. )
  54. if not defined m3 (
  55. for %%a in (%t4%) do (
  56. echo !_str!|find "%%a" 1>nul && set m3=B
  57. )
  58. )
  59. )
  60. echo ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  61. ren "!str!" "【!m1!!m2!!m3!】【%Today%】!str!"
  62. endlocal
  63. )
  64. pause
复制代码

作者: qd2024    时间: 2024-1-9 12:32

本帖最后由 qd2024 于 2024-1-9 12:34 编辑

回复 10# 77七


    明白 辛苦
作者: aloha20200628    时间: 2024-1-9 13:16

本帖最后由 aloha20200628 于 2024-1-9 13:18 编辑


本帖也许可以进一步简化》
假设楼主规定的前缀命名结构式如 【科目+年级+学期+...】,
据此构建一个提取词链表,和一个替换词链表(其中源词与替换词用/分割),两个链表中各项的顺序须满足命名结构式的顺序。
用上述方法或规则,楼主可以自己增减两个链表中的项目,但要确保其顺序和命名结构式中的顺序一致。
代码如下存为test.bat
当前版是测试检查版,用来检查更名结果是否正确;删除第14行再将原15行开头的REM删除即成真实更名版。
  1. @echo off &setlocal enabledelayedexpansion
  2. ::构建提取词链表
  3. set "提取词=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法"
  4. ::构建替换词链表
  5. set "替换词=一年/1 二年/2 三年/3 四年/4 五年/5 六年/6 七年/7 八年/8 九年/9 上学期/A 下学期/B ^
  6. 一上/1A 二上/2A 三上/3A 四上/4A 五上/5A 六上/6A 七上/7A 八上/8A 九上/9A ^
  7. 一下/1B 二下/2B 三下/3B 四下/4B 五下/5B 六下/6B 七下/7B 八下/8B 九下/9B"
  8. set "day=【%date:*-=%】"
  9. for /f "delims=" %%F in ('dir /b/s/a-d *.pdf *.doc*') do (
  10. set "nF=%%~nF" &set "new=【"
  11. for %%w in (!提取词! !替换词!) do for /f "tokens=1-2 delims=/" %%1 in ("%%~w") do (
  12. if "!nF:%%1=!" neq "!nF!" (if "%%2"=="" (set "new=!new!%%1") else (set "new=!new!%%2"))
  13. )
  14. echo,"!new!】!day!%%~nxF"
  15. REM ren "%%~F" "!new!】!day!%%~nxF"
  16. )
  17. endlocal &pause &exit/b
复制代码

作者: aloha20200628    时间: 2024-1-9 13:29

回复 9# qd2024

看到楼主调整了命名结构式,其实可以分拆提取词链表为多个即可,修正代码如下
  1. @echo off &setlocal enabledelayedexpansion
  2. ::构建前置提取词链表
  3. set "提取词1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法"
  4. ::构建替换词链表
  5. set "替换词=一年/1 二年/2 三年/3 四年/4 五年/5 六年/6 七年/7 八年/8 九年/9 上学期/A 下学期/B ^
  6. 一上/1A 二上/2A 三上/3A 四上/4A 五上/5A 六上/6A 七上/7A 八上/8A 九上/9A ^
  7. 一下/1B 二下/2B 三下/3B 四下/4B 五下/5B 六下/6B 七下/7B 八下/8B 九下/9B"
  8. ::构建后置提取词链表
  9. set "提取词2=一模 二模 三模 中考"
  10. set "day=【%date:*-=%】"
  11. for /f "delims=" %%F in ('dir /b/s/a-d *.pdf *.doc*') do (
  12. set "nF=%%~nF" &set "new=【"
  13. for %%w in (!提取词1! !替换词! !提取词2!) do for /f "tokens=1-2 delims=/" %%1 in ("%%~w") do (
  14. if "!nF:%%1=!" neq "!nF!" (if "%%2"=="" (set "new=!new!%%1") else (set "new=!new!%%2"))
  15. )
  16. echo,"!new!】!day!%%~nxF"
  17. REM ren "%%~F" "!new!】!day!%%~nxF"
  18. )
  19. endlocal &pause &exit/b
复制代码

作者: aloha20200628    时间: 2024-1-9 13:50


替换词链表用续行连接符^有问题,故须订正代码如下
  1. @echo off &setlocal enabledelayedexpansion
  2. ::构建前置提取词链表
  3. set "提取词1=语文 数学 物理 化学 历史 政治 生物 地理 英语 道法"
  4. ::构建替换词链表
  5. set "替换词=一年/1 二年/2 三年/3 四年/4 五年/5 六年/6 七年/7 八年/8 九年/9 上学期/A 下学期/B 一上/1A 二上/2A 三上/3A 四上/4A 五上/5A 六上/6A 七上/7A 八上/8A 九上/9A 一下/1B 二下/2B 三下/3B 四下/4B 五下/5B 六下/6B 七下/7B 八下/8B 九下/9B"
  6. ::构建后置提取词链表
  7. set "提取词2=一模 二模 三模 中考 高考"
  8. set "day=【%date:*-=%】"
  9. for /f "delims=" %%F in ('dir /b/s/a-d *.pdf *.doc*') do (
  10. set "nF=%%~nF" &set "new=【"
  11. for %%w in (!提取词1! !替换词! !提取词2!) do for /f "tokens=1-2 delims=/" %%1 in ("%%~w") do (
  12. if "!nF:%%1=!" neq "!nF!" (if "%%2"=="" (set "new=!new!%%1") else (set "new=!new!%%2"))
  13. )
  14. echo,"!new!】!day!%%~nxF"
  15. REM ren "%%~F" "!new!】!day!%%~nxF"
  16. )
  17. endlocal &pause &exit/b
复制代码

作者: qixiaobin0715    时间: 2024-1-9 15:46

本帖最后由 qixiaobin0715 于 2024-1-9 16:08 编辑

回复 9# qd2024
将关键词分为3类:
1.科目为第1类,由于变动不大,设置为变量即可;
set ConWords1=各学科 语文 数学 物理 化学 历史 英语 道法
2.中考和高考之类的为第2类,由于你不考虑高考,这里以中考为例,也设置为变量;如果中考高考综合考虑的话,需要在文件名中进行区分,即要含有高考或中考的词汇,代码也需要做相应的调整;
set ConWords2=中考 一模 二模 三模
3.年级和册数为第3类,由于其关键词数量多,变动大,并且考虑到之后还要进行增加新的词汇,可以考虑将其放在文本(比如文本ConWords.txt)中,具体形式及要求详见7楼中的说明;
ConWords.txt内容示范如下,可根据实际情况自己增减。文本中的说明文字可保留,不会影响代码运行结果。
  1. 关键词既关联年级又关联册数的信息,类似下面的形式。
  2. 一上-1A
  3. 九上-9A
  4. 一下-1B
  5. 九下-9B
  6. 关键词只关联年级或者只关联册数的信息,类似下面的形式。
  7. 1-1
  8. 2-2
  9. 9-9
  10. 一年-1
  11. 九年-9
  12. 上学期-A
  13. 第一学期-A
  14. 下学期-B
复制代码
代码test.bat
  1. @echo off
  2. set ConWords1=各学科 语文 数学 物理 化学 历史 英语 道法
  3. set ConWords2=中考 一模 二模 三模
  4. for /f "delims=" %%i in ('dir /b /a-d') do (
  5.     setlocal enabledelayedexpansion
  6.     for %%j in (%ConWords2%) do (
  7.         set str=%%i
  8.         set str=!str:%%j=!
  9.         if not "!str!"=="%%i" set str2=!str2!%%j
  10.     )
  11.     for %%j in (%ConWords1%) do (
  12.         set str=%%i
  13.         set str=!str:%%j=!
  14.         if not "!str!"=="%%i" set str1=%%j
  15.     )
  16.     if defined str2 (
  17.         set str1=!str1!9B
  18.     ) else (
  19.         set str=%%i
  20.         for %%j in (期中考试 00 01 02 03 04 05 06 07 08 09) do set str=!str:%%j=!
  21.         for /l %%j in (10,1,99) do set str=!str:%%j=!
  22.         for /f "tokens=1,2 delims=-" %%a in (ConWords.txt) do (
  23.             if not "!str!"=="!str:%%a=!" (
  24.                 set str1=!str1!%%b
  25.             )
  26.         )
  27.     )
  28.     if defined str2 (
  29.         set FileNamePre=[!str1!.!str2!]
  30.     ) else (
  31.         if defined str1 set FileNamePre=[!str1!]
  32.     )
  33.     if defined FileNamePre echo,!FileNamePre!%%i
  34.     endlocal
  35. )
  36. pause
复制代码

作者: qd2024    时间: 2024-1-10 06:29

回复 15# qixiaobin0715


    感谢 我学习一下




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2