ARTICLE · 1042777
按文件名前缀把 PDF 移入对应文件夹
按文件名前缀把 PDF 移入对应文件夹

01
—
【问题】
一批 PDF 的文件名由多段连字符组成,希望按前四段建立文件夹,并把每个文件移入对应目录,避免相似前缀互相误匹配。
02
—
【解决代码】
@echo offcd /d "%~dp0"for /f "delims=" %%i in ('dir /b /a-d "*-*-*-*.pdf"') do (for /f "tokens=1-4 delims=-" %%a in ("%%~ni") do (if not exist "%%a-%%b-%%c-%%d\" (md "%%a-%%b-%%c-%%d\")move "%%i" "%%a-%%b-%%c-%%d\"))pause
“tips: 使用时要小心,请备份好源文件,万一不小心,引起不可挽回的损失”
03
—
【代码解析】
原思路用通配符一次移动一组文件,容易把 1、10、100 这类相似前缀混在一起。改进方法是逐个文件处理,每次只移动当前枚举到的那个文件。
1. 固定工作目录
cd /d "%~dp0" 把当前目录切换到脚本所在位置,/d 允许同时切换盘符。
2. 逐个枚举 PDF
外层 dir /b /a-d 只列文件;delims= 让完整文件名进入 %%i。
3. 拆分文件名
%%~ni 表示去掉扩展名后的文件名,内层 for 按连字符切出前四段 %%a 到 %%d。
4. 创建并移动
if not exist 先判断目录,md 创建后,move "%%i" 只移动当前文件,因此不会误伤其他相似前缀。
初学者使用步骤
1. 先复制少量 PDF 到测试目录。
2. 确认文件名至少包含四个连字符分段。
3. 运行后检查生成目录和文件归属。
4. 确认无误后再用于完整文件集。
注意事项
• move 会改变原目录结构,操作前要备份。
• 如果名称中的前四段本身含额外连字符,分组规则需要重写。
• 目标目录已有同名文件时可能发生冲突。