批处理脚本优化需求:同前缀PDF归至同文件夹并重命名
批处理脚本改进方案:支持同前缀PDF归类与序号重命名
原有批处理脚本支持拖拽PDF文件执行,可单个PDF创建对应文件夹并重命名,但无法处理同前缀PDF(如102030_01.pdf、102030_02.pdf)的归类与序号递增需求。以下是改进后的解决方案:
改进后脚本代码
@Echo Off SetLocal EnableExtensions DisableDelayedExpansion If "%~1" == "" GoTo :EOF For %%G In (%*) Do (For %%H In ("%%~G") Do If "%%~aH" Lss "-" ( Echo Error! %%G no longer exists. %SystemRoot%\System32\timeout.exe /T 2 /NoBreak 1>NUL ) Else If "%%~aH" GEq "d" (For %%I In ("%%~G\*.pdf") Do Call :Sub "%%~I" ) Else If /I "%%~xG" == ".pdf" (Call :Sub "%%~G" ) Else (Echo Error! %%G is not a PDF %SystemRoot%\System32\timeout.exe /T 2 /NoBreak 1>NUL)) GoTo :EOF :Sub Set "filename=%~n1" Set "prefix=%filename%" :: 提取下划线前的前缀部分 For /F "delims=_" %%P In ("%filename%") Do Set "prefix=%%P" :: 移除前缀中的点号 Set "prefix=%prefix:.=%" :: 创建前缀命名的文件夹 MD "%~dp1%prefix%" 2>NUL If ErrorLevel 1 ( Echo Error! Failed to create folder "%~dp1%prefix%" %SystemRoot%\System32\timeout.exe /T 2 /NoBreak 1>NUL Exit /B ) :: 生成递增序号(统计目标文件夹内符合命名规则的文件数) Set "seq=00001" For /F "tokens=1 delims=" %%S In ('Dir /B /A-D "%~dp1%prefix%\P%prefix:-=%_V1_A0V0_T07-54-369-664_S*.pdf" 2^>NUL ^| Find /C /V ""') Do ( Set /A "seq=%%S+1" ) :: 格式化序号为5位数字 Set "seq=0000%seq%" Set "seq=%seq:~-5%" :: 移动并重命名文件 Move /Y %1 "%~dp1%prefix%\P%prefix:-=%_V1_A0V0_T07-54-369-664_S%seq%%~x1" Exit /B
关键修改说明
- 前缀提取:通过
For /F "delims=_"分割文件名,提取下划线前的部分作为文件夹名;若文件名无下划线,则使用原文件名作为前缀。 - 序号自动递增:通过
Dir命令统计目标文件夹内已存在的对应格式文件数量,将数量加1后格式化为5位数字(不足补0)。 - 路径调整:将原脚本中创建“原文件名”文件夹的逻辑,改为创建“前缀名”文件夹,确保同前缀文件归入同一目录。
内容的提问来源于stack exchange,提问作者user20083537
相关产品推荐
相关产品推荐

