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

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

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

TOP

本帖最后由 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行,读入文本即可。
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

返回列表