如何在Windows CMD中自动将文件移动到部分名称匹配的文件夹
如何在Windows CMD中自动将文件移动到部分名称匹配的文件夹
我来帮你搞定这个自动归类文件的需求!你想要把文件名以数字开头的文件,自动移动到以文件名前三位数字命名的文件夹里——比如把29100.txt移到\291文件夹、30011.ppt移到\300文件夹对吧?
先明确你的需求场景:你有这些待处理的文件:
- 29100.txt
- 29103.doc
- 30011.ppt
- 30013.txt
- 40100.xls
原本你考虑过先按每个文件名单独建文件夹再移动,后来简化成直接一步到位移到前三位数字的公共文件夹里,最终你找到的这个批处理脚本确实能完美解决问题,我来给你拆解下它的作用,方便你理解:
最终可用的批处理脚本
@echo off for /f "delims=" %%F in ( 'Dir /b *.*^|findstr "^[0-9]" ' ) do call :subr "%%F" exit /b :subr set "file=%~n1" set "fold=%file:~0,3%" if not exist "%fold%" md "%fold%" move %1 "%fold%" exit /b
脚本各部分简单解释
@echo off:关闭命令行的命令回显,让窗口只显示执行结果,界面更干净。for /f "delims=" %%F in ('Dir /b *.*^|findstr "^[0-9]" '):Dir /b *.*:列出当前目录下所有文件的纯文件名(不带路径、大小等额外信息)。findstr "^[0-9]":过滤出以数字开头的文件,避免误处理非目标文件。for /f:把前面命令输出的每个文件名,依次赋值给变量%%F,逐个处理。
call :subr "%%F":调用后面的:subr子流程,把当前文件名传进去单独处理。exit /b:主流程执行完后直接退出,避免后续子流程被重复触发。
子流程:subr的具体操作
set "file=%~n1":提取传入文件的纯文件名(不含扩展名),比如把"29100.txt"变成"29100"。set "fold=%file:~0,3%":截取纯文件名的前3个字符,作为目标文件夹的名称,比如"29100"变成"291"。if not exist "%fold%" md "%fold%":检查目标文件夹是否存在,如果不存在就自动创建它。move %1 "%fold%":把当前文件移动到目标文件夹里。exit /b:子流程执行完后返回主流程,继续处理下一个文件。
这个脚本完全符合你的需求,直接保存成.bat文件,放在你要处理文件的目录里双击运行就可以啦!
备注:内容来源于stack exchange,提问作者Novice_Extremely
相关产品推荐
相关产品推荐

