1)若删除文件夹中仅有1个文件的
2)新建文本文档,另存为 “删除单文件的文件夹.bat” ,修改第二行路径,双击运行:
@echo off chcp 65001 >nul set "Root=D:\TestFolder" :: 遍历一级子文件夹 for /d %%d in ("%Root%\*") do ( setlocal enabledelayedexpansion set cnt=0 :: 统计文件夹内文件数量 for %%f in ("%%d\*.*") do set /a cnt+=1 if !cnt! equ 1 ( for %%f in ("%%d\*.*") do ( move "%%f" "%Root%\" ) rd "%%d" echo 已处理:%%d ) endlocal ) pause若兼容删除1个文件 或 2 个文件 或 3个文件,可以改:
if !cnt! equ 1 or !cnt! equ 2 or !cnt! equ 3考虑递归子文件夹,重名处理,可使用以下代码
@echo off chcp 65001 >nul setlocal enabledelayedexpansion :: ==========在这里修改你的目标根目录========== set "RootPath=D:\TestFolder" :: =========================================== call :ScanFolder "%RootPath%" echo. echo =================全部处理完成================= pause exit /b :: 递归扫描文件夹子程序 :ScanFolder set "CurDir=%~1" :: 遍历当前目录下所有子文件夹 for /d %%d in ("%CurDir%\*") do ( call :ScanFolder "%%d" ) :: 统计当前文件夹内文件数量(不含子文件夹) set FileCount=0 for %%f in ("%CurDir%\*.*") do set /a FileCount+=1 :: 判断:1/2/3个文件才处理 if !FileCount! geq 1 if !FileCount! leq 3 ( echo 发现文件夹【%CurDir%】内含 !FileCount! 个文件,开始迁移 for %%f in ("%CurDir%\*.*") do ( set "SrcFile=%%f" set "FileName=%%~nf" set "Ext=%%~xf" set "Dest=%RootPath%\!FileName!!Ext!" set Seq=1 :: 重名则自动追加序号 (1)、(2)… :CheckRename if exist "!Dest!" ( set "Dest=%RootPath%\!FileName!(!Seq!)!Ext!" set /a Seq+=1 goto CheckRename ) move "!SrcFile!" "!Dest!" >nul echo 已移动:%%~nx^f → !Dest! ) rd "%CurDir%" echo ✅ 已删除空文件夹:%CurDir% echo. ) exit /b