本帖最后由 zhengzhenhui945 于 2024-8-17 19:11 编辑
====为了大家详细了解都添加了注释===场景1 为每种格式的文件加前缀并排序
例如 fhjks.txt fhjks.jpg 重命名后 txt001.txt jpg001.jpg
[Asm] 纯文本查看 复制代码 @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
按找对应的格式文件创建文件夹并移入
[Shell] 纯文本查看 复制代码 @echo off ; 关闭命令回显
setlocal EnableExtensions EnableDelayedExpansion ; 启用命令扩展和延迟环境变量扩展
for %%i in (*) do ( ; 遍历当前目录下的所有文件和文件夹
if /i "%%~xi" neq ".bat" ( ; 如果文件扩展名(不区分大小写)不是 ".bat"
md "%%~xi" ; 创建一个以文件扩展名命名的文件夹
move "*%%~xi" "%%~xi" ; 将所有具有该扩展名的文件移动到相应的文件夹中
)
)
pause ; 暂停,等待用户按键
场景3
以子文件夹名称作为文件名的前缀
[Shell] 纯文本查看 复制代码 @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
只取特殊符号左边的字命名文件夹并移入
例如 数学-五年-六班 处理结果 新建名为【数学】文件夹并移入
[Shell] 纯文本查看 复制代码 @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个分配于文件夹内
数量可以在代码里面改
[Shell] 纯文本查看 复制代码 @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
提取当前目录下所有包含某些关键字的文件并移入指定名称文件夹(当前目录),没有则创建
指定名称文件夹(是在当前目录)
[Shell] 纯文本查看 复制代码 @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 这个批处理放在当前文件夹内处理即可
下面这个是没有遍历子文件夹,只是获取当前文件夹的文件
[Shell] 纯文本查看 复制代码 @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
遍历到关键词后移入指定文件夹,并以关键词作二次分类
[Shell] 纯文本查看 复制代码 @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成品下载下载链接:
BAT成品下载.txt
(41 Bytes, 下载次数: 44)
免费评分支持一下,俺想早点升级换个头像 |