如何批量整理文件夹内PDF文件并按数字文件名规则分类归档到指定目录
PDF批量归档实现方案
核心实现思路
- 优先选择Windows系统自带的PowerShell实现,无需安装第三方软件,适配Windows原生路径格式,稳定性高
- 遍历
Z:\PDF Archive\2010路径下所有后缀为.pdf的文件 - 对每个文件名提取纯数字前缀,通过正则校验是否符合6/7位纯数字命名规则,不符合规则的文件自动跳过留待手动处理
- 符合规则的文件名:6位的自动在左侧补0转为7位,7位的直接沿用
- 根据7位数字生成两级归档目录:第一级目录取7位数字的前两位,拼接为
XX00000-XX99999格式,第二级目录取7位数字的前三位,拼接为XXX0000-XXX9999格式 - 自动递归创建不存在的目录,将原文件复制到对应归档路径,支持按需调整为移动文件模式
可直接运行的PowerShell脚本
# 定义源文件目录和归档根目录 $sourcePath = "Z:\PDF Archive\2010" $archiveRoot = "Z:\PDF Archive" # 遍历所有PDF文件 Get-ChildItem -Path $sourcePath -Filter *.pdf -File | ForEach-Object { $fileName = $_.BaseName $ext = $_.Extension # 校验文件名是否为纯6/7位数字 if ($fileName -match '^\d{6,7}$') { # 左侧补0统一转为7位文件名 $7bitName = $fileName.PadLeft(7, '0') # 计算两级归档目录名称 $level1Prefix = $7bitName.Substring(0,2) $level1Dir = "$level1Prefix`00000-$level1Prefix`99999" $level2Prefix = $7bitName.Substring(0,3) $level2Dir = "$level2Prefix`0000-$level2Prefix`9999" # 拼接完整归档路径 $targetDir = Join-Path -Path $archiveRoot -ChildPath "$level1Dir\$level2Dir" $targetFullPath = Join-Path -Path $targetDir -ChildPath "$7bitName$ext" # 自动创建目录,已存在的目录会直接跳过 New-Item -Path $targetDir -ItemType Directory -Force | Out-Null # 复制文件,如需剪切移动直接把Copy-Item改为Move-Item即可 Copy-Item -Path $_.FullName -Destination $targetFullPath -Force Write-Host "处理完成:$($_.Name) → $targetFullPath" } else { Write-Host "跳过非规则文件:$($_.Name)" } }
注意事项
- 首次运行建议先注释掉
Copy-Item所在行,仅执行目录创建和路径打印逻辑,确认路径规则完全符合预期后再执行实际的文件复制操作 - 脚本默认保留源路径的原文件,如需归档后删除源文件,将
Copy-Item替换为Move-Item即可 - 15000个文件的处理总耗时不超过1分钟,无性能瓶颈
- 所有不符合6/7位纯数字命名规则的文件都会被单独打印出来,可在脚本运行完成后手动处理这批特殊文件
内容的提问来源于stack exchange,提问作者Bryan Bishop Pagenkopf
相关产品推荐
相关产品推荐

