【PowerShell】アプリの不要ファイル(tmp/log)を自動削除するスクリプト
はじめに
PCを使用していると、アプリが生成した一時ファイルが知らない間に蓄積し、ディスク容量を圧迫することがあります。
Windowsには cleanmgr やWindows 11の「設定」→「システム」→「ストレージ」といった標準の不要ファイル削除ツールがありますが、これらは主に OSが管理する一時ファイルや古いシステムアップデート を対象としています。各アプリケーションが個別に生成したテンポラリファイルやログファイルは、対象外となるケースがほとんどです。
そこで、ユーザー領域(LOCALAPPDATA 配下)にあるアプリ固有の不要ファイルを削除するPowerShellスクリプトを作成しました。標準機能では掃除しきれない「かゆいところに手が届く」補完的なツールです。
私が自分のPCで初めて実行したときは、7GBもの不要データを削減できました!
動作環境
- OS: Windows 11
機能
-
LOCALAPPDATA配下のアプリ固有の不要ファイル(テンポラリ・ログ)を削除 - アプリが使用中のファイルはスキップ(エラーなしで続行)
ソースコード
Clean_temp.ps1 というファイル名で任意のフォルダに保存してください。
Write-Host "=== Clean Temp & Log Start ==="
# Temp削除
Remove-Item "$env:LOCALAPPDATA\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue
# log削除(更新日時が7日以上前のものだけ)
Get-ChildItem "$env:LOCALAPPDATA" -Recurse -Include *.log |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -ErrorAction SilentlyContinue
# tmp削除
Get-ChildItem "$env:LOCALAPPDATA" -Recurse -Include *.tmp |
Remove-Item -Force -ErrorAction SilentlyContinue
Write-Host "=== Completed ==="
注意事項
- Outlook / Teams / Edge などのアプリはなるべく停止してから実行してください。 使用中のファイルは削除されませんが、予期しないエラーを防ぐためです。
- 障害が発生しているPCには使用しないでください。 ログファイルを削除すると、障害調査に必要なログ解析ができなくなります。
実行方法
- スタートメニューで「PowerShell」を検索
- 右クリック → 管理者として実行
- スクリプトが存在するフォルダへ移動(例:
C:\Scripts)cd C:\Scripts - スクリプトを実行
.\Clean_temp.ps1
補足1:「スクリプトの実行が無効」エラーが出た場合
まず以下を1回だけ実行してから、再度スクリプトを実行してください。
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
補足2:タスクスケジューラで自動実行する場合
Windows 11のタスクスケジューラから定期実行を設定できます。
- スタートメニューを右クリック →「コンピュータの管理」→「タスクスケジューラ」を選択
- 「操作(A)」→「タスクの作成(R)...」をクリック
- 「全般」タブの「名前」にタイトルを入力(例:
_Clean_Temp) - 「トリガー」タブで実行タイミングを設定
- 「操作」タブで以下を設定
| 項目 | 入力値 |
|---|---|
| プログラム/スクリプト | powershell.exe |
| 引数の追加 | -ExecutionPolicy Bypass -File "C:\Scripts\Clean_temp.ps1" |
| 開始(オプション) | C:\Scripts\ |
技術的解説
コード解説
| 行番号 | 実行コード | 解説 |
|---|---|---|
| 1 | Write-Host "=== Clean Temp & Log Start ===" |
開始メッセージをコンソールに表示。 |
| 3-4 | Remove-Item "$env:LOCALAPPDATA\Temp\*" ... |
ユーザーの一時フォルダ内のすべてのファイルを強制的に再帰削除。使用中のファイルがあってもエラーを出さずに続行。 |
| 6-9 | Get-ChildItem ... | Where-Object ... |
更新日時が7日以上経過したログファイルを削除。 |
| 11-13 | Get-ChildItem ... -Include *.tmp |
拡張子が .tmp のファイルをすべて削除。 |
| 15 | Write-Host "=== Completed ===" |
完了メッセージをコンソールに表示。 |
ポイント
安全性の確保
Remove-Item "$env:LOCALAPPDATA\Temp\*" はワイルドカード(*)でフォルダの中身のみを削除しており、フォルダ自体は残ります。
ログ削除の範囲
-Recurse オプションにより、LOCALAPPDATA 直下だけでなく、すべてのサブフォルダ内のログも探索します。特定アプリの重要なログを誤って削除したくない場合は、パスを以下のように具体的に指定することで安全に運用できます。
"$env:LOCALAPPDATA\SomeApp\Logs"
その他の記事は BB研究所 で公開しています。