汕尾市护送信息网

批处理定时删除指定文件夹及子文件夹 bat脚本

2026-04-03 17:01:01 浏览次数:0
详细信息

方案1:直接删除指定文件夹(立即执行)

@echo off
setlocal enabledelayedexpansion

:: ============================================
:: 配置部分:请修改这里的路径
:: ============================================
set "FOLDER_TO_DELETE=D:\Temp\OldData"
set "MAX_RETRY=3"
set "RETRY_DELAY=2"

:: ============================================
:: 删除主程序
:: ============================================

echo ============================================
echo 正在删除文件夹:%FOLDER_TO_DELETE%
echo 开始时间:%date% %time%
echo ============================================

:: 检查文件夹是否存在
if not exist "%FOLDER_TO_DELETE%" (
    echo 文件夹不存在:%FOLDER_TO_DELETE%
    echo 任务完成!
    pause
    exit /b
)

:: 显示将要删除的内容
echo 将要删除的内容:
dir "%FOLDER_TO_DELETE%" /s | find "个文件" | findstr "[0-9]"

:: 安全确认(注释掉以下3行可跳过确认)
set /p CONFIRM=确认要删除以上文件夹吗?(Y/N):
if /i not "%CONFIRM%"=="Y" (
    echo 操作已取消。
    pause
    exit /b
)

:: 尝试删除文件夹
set retry_count=0
:retry_delete
rd /s /q "%FOLDER_TO_DELETE%" 2>nul

:: 检查是否删除成功
if exist "%FOLDER_TO_DELETE%" (
    set /a retry_count+=1
    if !retry_count! lss %MAX_RETRY% (
        echo 删除失败,正在重试 (第 !retry_count! 次)...
        timeout /t %RETRY_DELAY% /nobreak >nul
        goto retry_delete
    ) else (
        echo 错误:无法删除文件夹 %FOLDER_TO_DELETE%
        echo 请检查文件权限或文件是否被其他程序占用。
    )
) else (
    echo 文件夹已成功删除!
)

echo ============================================
echo 结束时间:%date% %time%
echo ============================================
pause

方案2:定时自动删除(使用Windows计划任务)

步骤1:创建删除脚本 delete_folder.bat

@echo off
:: 记录日志
echo ========================================== >> delete_log.txt
echo 删除任务开始时间:%date% %time% >> delete_log.txt

:: 要删除的文件夹路径
set "TARGET_FOLDER=D:\Backup\OldFiles"

:: 删除前检查
if not exist "%TARGET_FOLDER%" (
    echo 目标文件夹不存在 >> delete_log.txt
    exit /b
)

:: 获取文件夹大小(可选)
for /f "tokens=3" %%A in ('dir /s "%TARGET_FOLDER%" ^| find "个文件"') do (
    echo 删除前大小:%%A >> delete_log.txt
)

:: 执行删除
rd /s /q "%TARGET_FOLDER%"

:: 检查删除结果
if exist "%TARGET_FOLDER%" (
    echo 删除失败! >> delete_log.txt
) else (
    echo 删除成功! >> delete_log.txt
)

echo 删除任务结束时间:%date% %time% >> delete_log.txt
echo ========================================== >> delete_log.txt

步骤2:创建定时任务脚本 schedule_delete.bat

@echo off
:: 设置Windows计划任务每天凌晨2点执行删除

schtasks /create /tn "DeleteOldFolders" ^
           /tr "C:\Scripts\delete_folder.bat" ^
           /sc daily /st 02:00 ^
           /ru SYSTEM ^
           /rl HIGHEST ^
           /f

echo 计划任务已创建!
echo 任务名称:DeleteOldFolders
echo 执行时间:每天凌晨2点
echo 执行脚本:C:\Scripts\delete_folder.bat
pause

方案3:删除特定条件的文件夹(如N天前的)

@echo off
setlocal enabledelayedexpansion

:: 配置参数
set "BASE_FOLDER=D:\Data"
set "DAYS_OLD=30"   :: 删除30天前的文件夹
set "LOG_FILE=delete_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt"

echo ===== 删除过期文件夹任务开始 ===== > "%LOG_FILE%"
echo 开始时间:%date% %time% >> "%LOG_FILE%"
echo 基础路径:%BASE_FOLDER% >> "%LOG_FILE%"
echo 删除条件:%DAYS_OLD%天前的文件夹 >> "%LOG_FILE%"

:: 遍历基础文件夹下的所有子文件夹
for /d %%i in ("%BASE_FOLDER%\*") do (
    set "folder_path=%%i"
    set "folder_name=%%~nxi"

    :: 检查文件夹最后修改时间
    for /f "tokens=1-3 delims=/" %%a in ("%%~ti") do (
        set "file_date=%%c-%%a-%%b"
    )

    :: 转换为日期差(简化版,实际使用建议用PowerShell)
    :: 这里只是示例,实际应该用更精确的日期计算

    :: 安全排除列表(不删除这些)
    if not "!folder_name!"=="Important" (
        if not "!folder_name!"=="Current" (
            echo 检查文件夹:!folder_name! >> "%LOG_FILE%"

            :: 这里可以添加实际的日期判断逻辑
            :: 实际使用时建议结合PowerShell或ROBOCOPY
        )
    )
)

echo ===== 删除过期文件夹任务结束 ===== >> "%LOG_FILE%"
echo 结束时间:%date% %time% >> "%LOG_FILE%"

echo 任务完成!详细日志查看:%LOG_FILE%
pause

方案4:使用ROBOCOPY删除空文件夹并记录日志

@echo off
:: 使用ROBOCOPY方法删除文件夹(更安全)
set "FOLDER_TO_CLEAN=C:\Temp"

:: 1. 先清空文件夹内容
robocopy "%FOLDER_TO_CLEAN%" "%FOLDER_TO_CLEAN%_temp" /MOVE /E /NP /LOG+:clean_log.txt

:: 2. 删除空文件夹
rd /s /q "%FOLDER_TO_CLEAN%"

:: 3. 重命名(如果需要保留文件夹结构)
:: md "%FOLDER_TO_CLEAN%"
echo 清理完成!
pause

安全建议和注意事项:

重要提示

测试模式脚本(安全检查):

@echo off
set "TEST_FOLDER=D:\Test"
echo 模拟删除(仅显示,不实际删除):
for /r "%TEST_FOLDER%" %%i in (*) do echo 将删除文件:%%i
for /d %%i in ("%TEST_FOLDER%\*") do echo 将删除文件夹:%%i
pause

权限要求

恢复方法

推荐的最佳实践:

对于生产环境

对于复杂需求

定期维护

请根据您的具体需求选择合适的方案,并在执行前务必备份重要数据!

相关推荐