bat批处理之&文件归类归档
本帖最后由 zhengzhenhui945 于 2024-8-17 19:11 编辑====为了大家详细了解都添加了注释===场景1 为每种格式的文件加前缀并排序
例如fhjks.txtfhjks.jpg 重命名后 txt001.txt jpg001.jpg
@echo off
rem 为了方便了解都添加了注释
rem 开始一个循环,遍历指定的文件扩展名
for %%i in (gif jpg webp jpeg png txt) do (
setlocal enabledelayedexpansion
rem 对于每个扩展名,在当前目录中查找具有该扩展名的文件
for /f "delims=" %%j in ('dir /b /a-d "*.%%i"') do (
rem 计数器自增 1
set /a n+=1
rem 在计数器前面添加 0 以达到三位数,然后取后三位
set m=00!n!
set m=!m:~-3!
rem 重命名文件,新文件名格式为 "扩展名-三位数序号.扩展名"
ren "%%j" "%%i-!m!.%%i"
)
endlocal
)
rem 暂停,等待用户按下任意键
pause
场景2
按找对应的格式文件创建文件夹并移入
@echo off; 关闭命令回显
setlocal EnableExtensions EnableDelayedExpansion; 启用命令扩展和延迟环境变量扩展
for %%i in (*) do (; 遍历当前目录下的所有文件和文件夹
if /i "%%~xi" neq ".bat" (; 如果文件扩展名(不区分大小写)不是 ".bat"
md "%%~xi"; 创建一个以文件扩展名命名的文件夹
move "*%%~xi" "%%~xi"; 将所有具有该扩展名的文件移动到相应的文件夹中
)
)
pause; 暂停,等待用户按键
场景3
以子文件夹名称作为文件名的前缀
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s /ad') do (// 遍历当前目录及其子目录中的所有文件夹
echo 正在处理文件夹 %%a// 输出正在处理的文件夹名称
pushd "%%a"// 进入该文件夹
set n=0// 初始化计数器为 0
for /f "delims=" %%b in ('dir /b /a-d *.png') do (// 遍历该文件夹中的所有 PNG 图片文件
set /a n+=1// 计数器加 1
ren "%%b" "%%~nxa-!n!%%~xb"// 重命名当前图片文件,格式为 "原文件名-计数器值.扩展名"
)
popd// 退出当前文件夹
)
场景4
只取特殊符号左边的字命名文件夹并移入
例如数学-五年-六班 处理结果 新建名为【数学】文件夹并移入
@echo off; 关闭命令行的回显
cd /d "%~dp0"; 切换到当前批处理文件所在的目录
setlocal enabledelayedexpansion; 启用延迟环境变量扩展
for /f "delims=" %%D in ('dir /ad /b /s') do (; 遍历所有子目录
pushd "%%D"; 进入当前子目录
for /f "delims=" %%i in ('dir /b /a-d "*-*"') do (; 遍历当前子目录中符合"*-*"格式的文件
set "filename=%%i"; 设置当前文件名
for /f "tokens=1* delims=-" %%a in ("!filename!") do (; 以"-"为分隔符拆分文件名
set "folderName=%%a"; 获取拆分后的第一部分作为文件夹名
if not exist "!folderName!" (; 如果该文件夹不存在
md "!folderName!"; 创建该文件夹
)
move "%%i" "!folderName!"; 将文件移动到对应的文件夹
)
)
popd; 退出当前子目录
)
场景5
把当前目录下的文件 平均为5个分配于文件夹内
数量可以在代码里面改
@echo off&setlocal enabledelayedexpansion
echo;&echo; 不要慌!开始整理……&echo;
set 整理的文件夹f=0
set numf=0
set conf=0
if not exist 整理的文件夹!整理的文件夹f! md 整理的文件夹!整理的文件夹f!
for /f "tokens=*" %%a in ('dir /b /a-d') do (
if !numf! geq 5 set numf=0&set /a 整理的文件夹f+=1&md 整理的文件夹!整理的文件夹f!
if not "%%~na"=="%~n0" move "%%~a" 整理的文件夹!整理的文件夹f!&set /a numf+=1
set /a conf=!整理的文件夹f!*5+!numf!
)
echo;&echo; 整理完成,共 !conf! 个文件,请注意检查!&pause>nul
场景6
提取当前目录下所有包含某些关键字的文件并移入指定名称文件夹(当前目录),没有则创建
指定名称文件夹(是在当前目录)
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"
rem 定义要匹配的关键字和目标文件夹
set "keywords=周杰伦 林俊杰 张惠妹 刘德华"
set "targetFolder=爱听的文件夹"
rem 检查并创建目标文件夹
if not exist "%targetFolder%" (
mkdir "%targetFolder%"
)
rem 通过循环检查关键字,使用findstr进行匹配
for /r %%a in (*.*) do (
set "fileName=%%~nxa"
for %%k in (%keywords%) do (
if /i "!fileName!" neq "!fileName:*%%k=!" (
echo Moving "%%a" to "%targetFolder%"
move "%%a" "%targetFolder%" >nul 2>&1 || echo Error moving file: "%%a"
)
)
)
endlocal
rem这个批处理放在当前文件夹内处理即可
下面这个是没有遍历子文件夹,只是获取当前文件夹的文件
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"
rem 定义要匹配的关键字和目标文件夹
set "keywords=周杰伦 林俊杰 张惠妹 刘德华"
set "targetFolder=爱听的文件夹"
rem 检查并创建目标文件夹
if not exist "%targetFolder%" (
mkdir "%targetFolder%"
)
rem 使用 findstr 对关键字进行模糊匹配
for /r %%a in (*.*) do (
set "fileName=%%~nxa"
for /f "tokens=*" %%b in ('echo !fileName! ^| findstr /i "%keywords%"') do (
echo Moving "%%a" to "%targetFolder%"
move "%%a" "%targetFolder%\" >nul 2>&1 || echo Error moving file: "%%a"
)
)
endlocal
场景7
遍历到关键词后移入指定文件夹,并以关键词作二次分类
@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"
rem 定义要匹配的关键字和目标文件夹
set "keywords=周杰伦 林俊杰 张惠妹 刘德华"
set "targetFolder=爱听的文件夹"
if not exist "%targetFolder%" (
mkdir "%targetFolder%"
)
for /r %%a in (*.*) do (
set "fileName=%%~nxa"
for %%k in (%keywords%) do (
if /i "!fileName!" neq "!fileName:*%%k=!" (
echo Moving "%%a" to "%targetFolder%"
move "%%a" "%targetFolder%"
)
)
)
for %%k in (%keywords%) do (
set "subFolder=%targetFolder%\%%~k"
if not exist "!subFolder!" (
mkdir "!subFolder!"
)
)
for /r "%targetFolder%" %%b in (*) do (
set "fileName=%%~nb"
for %%k in (%keywords%) do (
if /i "!fileName!" neq "!fileName:*%%k=!" (
echo Moving "%%b" to "%targetFolder%\%%k"
move "%%b" "%targetFolder%\%%k"
)
)
)
endlocal
使用方法【把代码保存下来,粘贴到txt,将.txt后缀改为.bat后缀,放到自己需要处理的目录即可】
测试文件请做好备份!!
BAT成品下载下载链接:
免费评分支持一下,俺想早点升级换个头像 本帖最后由 zhengzhenhui945 于 2024-7-24 14:36 编辑
请务必备份了先测试文件!!!!!
以下是提取文件后删除空文件夹,
遇到同名文件会在后缀从 _1 开始递增
做好备份 在测试的文件夹内提取出文件再做归类
@echo off
rem 提取文件到根目录
for /r "%cd%" %%f in (*) do (
set "newName=%%~nf"
set "ext=%%~xf"
setlocal enabledelayedexpansion
if exist "!newName!!ext!" (
set /a count=1
:loop
if not exist "!newName!_!count!!ext!" (
move "%%f" "!newName!_!count!!ext!"
goto :next
)
set /a count+=1
goto :loop
)
move "%%f" "!newName!!ext!"
:next
endlocal
)
rem 删除空文件夹
for /d %%d in (*) do (
rd "%%d" 2>nul
) 就喜欢看别人编的批处理 好东西,收藏起来 好东西,谢谢分享! 有什么宝贵建议,大家可以互相分享一下{:1_918:}
办公场景还是批处理好玩{:1_893:} 就喜欢这样简单快捷的处理方式。命令行方式有时候确实能完成很多工作,还快速! 感谢!! 不错谢谢分享,收了编译成程序用 kangta520 发表于 2024-7-23 19:00
不错谢谢分享,收了编译成程序用
哈哈,期待你的成品:victory: 这个真好,去年自己半吊子搞半天没实现,要不运行不起来,要不动起来编的数不对,非常感谢有人做了