Windows を使っていると、気づかないうちにフォルダがファイルでいっぱいになってしまうことがあります。 特に、
- ログファイル
- 一時ファイル
- バックアップファイル
- ダウンロードフォルダの不要データ
こうした “放置されがちなファイル” は、時間が経つほどストレージを圧迫する。 そこで役立つのが PowerShell を使った自動削除スクリプトです。
この記事では、 「指定日数より古いファイルを自動削除する方法」 について説明します。
PowerShell とは?
PowerShell は Windows に標準搭載されている自動化ツールです。 ファイル操作、ネットワーク操作、アプリ制御など、幅広い作業をスクリプトで実行でます。
今回はその中でも最も実用的な機能のひとつ、 「古いファイルの自動削除」 です。
古いファイルを削除する基本コマンド
PowerShell で古いファイルを削除するには、以下の3つのコマンドを組み合わせます。
Get-ChildItem:フォルダ内のファイル一覧を取得Where-Object:条件で絞り込みRemove-Item:削除
これらを組み合わせることで、 「〇日より古いファイルだけ削除する」という処理が簡単に作れます。
30日より古いファイルを削除するスクリプト
まずは最も基本的な例です。
# 対象フォルダ
$TargetFolder = "C:\test"
# 削除対象の日数(30日より古いファイル)
$Limit = (Get-Date).AddDays(-30)
# 古いファイルを削除
Get-ChildItem $TargetFolder -File | Where-Object {
$_.LastWriteTime -lt $Limit
} | Remove-Item -Force
● $TargetFolder
削除したいフォルダを指定する。
● $Limit = (Get-Date).AddDays(-30)
「今日から30日前」の日時を作成する。
これより古いファイルが削除対象になる。
● Get-ChildItem
フォルダ内のファイル一覧を取得。
● Where-Object
LastWriteTime(最終更新日)が $Limit より古いものだけを抽出。
● Remove-Item -Force
抽出されたファイルを削除。
サブフォルダも含めて削除したい場合
ログフォルダなどは、日付ごとにサブフォルダが作られることが多いです。 その場合は -Recurse を付けます。
Get-ChildItem $TargetFolder -File -Recurse | Where-Object {
$_.LastWriteTime -lt $Limit
} | Remove-Item -Force
削除前に「何が消えるか」確認したい場合
いきなり削除するのは怖い…という人は、まずは一覧だけ表示して確認すると安心です。
Get-ChildItem $TargetFolder -File | Where-Object {
$_.LastWriteTime -lt $Limit
}
これで削除対象のファイルだけが表示されます。

特定の拡張子だけ削除したい場合
例えば「.log ファイルだけ削除したい」場合。
Get-ChildItem $TargetFolder -File -Filter *.log | Where-Object {
$_.LastWriteTime -lt $Limit
} | Remove-Item -Force
削除したファイルをログに残したい場合
削除したファイル名を記録しておくと、「何が消えたのか」を後から確認できて便利です。
$LogFile = "C:\CleanupLog.txt"
Get-ChildItem $TargetFolder -File | Where-Object {
$_.LastWriteTime -lt $Limit
} | ForEach-Object {
$_.FullName | Out-File -FilePath $LogFile -Append
Remove-Item $_.FullName -Force
}
古いファイル削除スクリプト(まとめ)
# 対象フォルダ
$TargetFolder = "C:\test"
# 削除対象の日数
$Limit = (Get-Date).AddDays(-30)
# ログファイル
$LogFile = "C:\CleanupLog.txt"
# 古いファイルを削除し、ログに記録
Get-ChildItem $TargetFolder -File -Recurse | Where-Object {
$_.LastWriteTime -lt $Limit
} | ForEach-Object {
$_.FullName | Out-File -FilePath $LogFile -Append
Remove-Item $_.FullName -Force
}
これを .ps1 として保存すれば、 いつでも実行できる 削除スクリプトが完成します。
もっとPowerShellを学びたい人へ
|
Windows PowerShell超入門 4.0対応 [ 新丈径 ] 価格:2200円 |
|
PowerShellハンズオン 日常作業が楽になる自動化レシピ集【電子書籍】[ 風来坊 ] 価格:1980円 |
|
Windows PowerShellクックブック [ リー・ホームズ ] 価格:4400円 |
まとめ
この記事では、
- PowerShell で古いファイルを削除する方法
- 日数指定での削除
- サブフォルダ対応
- 削除ログの作成
について説明しました。
PowerShell の良いところは、一度スクリプトを作れば、あとは自動で動いてくれる ところです。ストレージの無駄遣いを防ぎたい人は、ぜひ今回のスクリプトを活用してみてください。
