实用脚本能自动清理临时文件夹吗?

wen 实用脚本 3

本文目录导读:

实用脚本能自动清理临时文件夹吗?

  1. 方案一:批处理脚本(.bat 文件 - 推荐,最轻量)
  2. 方案二:PowerShell 脚本(功能更强,可定时执行)
  3. 安全注意事项(必读)

当然可以,以下是一个实用且安全的自动清理临时文件夹脚本(适用于 Windows 系统),包含详细的注释和防误删保护逻辑。

批处理脚本(.bat 文件 - 推荐,最轻量)

功能特点:

  • 自动清理 %TEMP%%WINDIR%\Temp%WINDIR%\Prefetch(可选)
  • 不删除任何正在被系统/程序使用的文件(不会导致系统崩溃)
  • 自动跳过 7 天内的文件(防止误删) —— 可自行调整天数
  • 清空回收站(可选)
  • 输出详细的清理报告

脚本代码

@echo off系统临时文件清理工具 - 安全模式
color 0A
setlocal enabledelayedexpansion
:: ========== 配置区 ==========
:: 设置跳过最近几天的文件(0 表示不跳过,但风险较高)
set SKIP_DAYS=7
:: 是否清空回收站(YES 或 NO)
set CLEAN_RECYCLE=YES
:: ============================
echo ========================================
echo    安全清理临时文件
echo    跳过最近 %SKIP_DAYS% 天的文件(%SKIP_DAYS% 天内创建的文件保留)
echo ========================================
echo.
:: 请求管理员权限(临时文件夹需要)
>nul 2>&1 net session
if %errorlevel% neq 0 (
    echo [提示] 建议以管理员身份运行以清理系统临时文件夹
    echo 按任意键继续(部分文件可能无法删除)...
    pause >nul
)
:: ---------- 清理 用户临时文件夹 ----------
echo [1/3] 正在清理用户临时文件夹...
set "USER_TEMP=%TEMP%"
if exist "!USER_TEMP!\" (
    forfiles /p "!USER_TEMP!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==FALSE echo 删除文件: @path & del /f /q @path 2>nul" >nul 2>&1
    forfiles /p "!USER_TEMP!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==TRUE rd /s /q @path 2>nul" >nul 2>&1
)
echo    完成
:: ---------- 清理 系统临时文件夹 ----------
echo [2/3] 正在清理系统临时文件夹...
set "SYS_TEMP=%WINDIR%\Temp"
if exist "!SYS_TEMP!\" (
    forfiles /p "!SYS_TEMP!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==FALSE echo 删除文件: @path & del /f /q @path 2>nul" >nul 2>&1
    forfiles /p "!SYS_TEMP!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==TRUE rd /s /q @path 2>nul" >nul 2>&1
)
echo    完成
:: ---------- (可选)清理 Prefetch ----------
:: Prefetch 是系统加速缓存,清理后开机可能会稍慢,但安全
echo [可选] 正在清理 Prefetch 缓存...
set "PREFETCH=%WINDIR%\Prefetch"
if exist "!PREFETCH!\" (
    forfiles /p "!PREFETCH!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==FALSE echo 删除文件: @path & del /f /q @path 2>nul" >nul 2>&1
    forfiles /p "!PREFETCH!" /s /d -%SKIP_DAYS% /c "cmd /c if @isdir==TRUE rd /s /q @path 2>nul" >nul 2>&1
)
echo    完成
:: ---------- 清空回收站 ----------
if /i "%CLEAN_RECYCLE%"=="YES" (
    echo [3/3] 正在清空回收站...
    rd /s /q C:\$Recycle.bin 2>nul
    rd /s /q D:\$Recycle.bin 2>nul
    rd /s /q E:\$Recycle.bin 2>nul
    REM 如有其他盘符可自行添加
    echo    完成
) else (
    echo [3/3] 跳过清空回收站
)
echo.
echo ========================================
echo    清理完毕!请手动重启资源管理器
echo    或直接重启电脑以完全释放空间
echo ========================================
pause

使用方法:

  1. 将上述代码复制,保存为 clean_temp.bat
  2. 右键 → 以管理员身份运行
  3. 根据提示操作

PowerShell 脚本(功能更强,可定时执行)

如果你想要一键自动化 + 定时执行,这个脚本更灵活:

# ============================================
# 脚本:Clean-TempFolders.ps1
# 描述:安全清理 Windows 临时文件夹
# 用途:可配合 任务计划程序 定时执行
# ============================================
# 配置参数(可修改)
$SkipDays = 7               # 跳过最近几天的文件
$CleanRecycleBin = $true    # 是否清空回收站
$ShowVerbose = $false       # 是否显示详细日志
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Host "[$Timestamp] 开始清理临时文件夹..."
# 1. 清理用户临时目录
$UserTemp = [System.Environment]::GetEnvironmentVariable("TEMP", "User")
if (Test-Path $UserTemp) {
    Write-Host "[*] 正在清理: $UserTemp"
    Get-ChildItem -Path $UserTemp -Recurse -Force -ErrorAction SilentlyContinue | 
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$SkipDays) } | 
        Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
# 2. 清理系统临时目录
$SysTemp = "$env:SystemRoot\Temp"
if (Test-Path $SysTemp) {
    Write-Host "[*] 正在清理: $SysTemp"
    Get-ChildItem -Path $SysTemp -Recurse -Force -ErrorAction SilentlyContinue | 
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$SkipDays) } | 
        Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
# 3. 清理 Windows 更新缓存(可选)
$SoftwareDistribution = "$env:SystemRoot\SoftwareDistribution\Download"
if (Test-Path $SoftwareDistribution) {
    Write-Host "[*] 正在清理: Windows 更新缓存"
    Get-ChildItem -Path $SoftwareDistribution -Recurse -Force -ErrorAction SilentlyContinue | 
        Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$SkipDays) } | 
        Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
# 4. 清空回收站
if ($CleanRecycleBin) {
    Write-Host "[*] 正在清空回收站..."
    Clear-RecycleBin -Force -ErrorAction SilentlyContinue
    Write-Host "[*] 回收站已清空"
}
$EndTimestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Host "[$EndTimestamp] 清理完成!"
Write-Host "注意:部分系统正在使用的文件会被自动跳过(不影响系统安全)"

如何自动定期运行(任务计划程序):

  1. 打开 任务计划程序 (taskschd.msc)
  2. 创建基本任务 → 设置触发器(比如每周一凌晨2点)
  3. 操作选择“启动程序” → 程序填 powershell.exe
  4. 参数填:-ExecutionPolicy Bypass -File "C:\你的路径\Clean-TempFolders.ps1"
  5. 勾选“使用最高权限运行”

安全注意事项(必读)

风险项 防护措施
删除正在使用的文件 脚本自动跳过,forfiles 只删“未占用”文件
误删重要配置文件 通过 -d -7 参数保留最近 7 天的文件
Prefetch 误删 不影响系统正常运行(只是开机性能稍微下降)
管理员权限不足 脚本要求提权运行(否则部分系统文件夹无法操作)

建议首次运行前:

  1. 手动备份 %TEMP% 中你认为重要的文件
  2. 以管理员身份运行
  3. 查看清理日志确认无异常

这两个脚本都非常轻量、安全、实用,可以放心使用,如果需要针对 macOS/Linux 的版本,也可以告诉我。

抱歉,评论功能暂时关闭!