1)若删除文件夹中仅有1个文件的
2)新建文本文档,另存为 "删除单文件的文件夹.bat" ,修改第二行路径,双击运行:
bash
@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个文件,可以改:
bash
if !cnt! equ 1 or !cnt! equ 2 or !cnt! equ 3
考虑递归子文件夹,重名处理,可使用以下代码
bash
@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