Windowsスクリプトでログと一時ファイルを自動クリーンアップする方法
友人や家族のパソコントラブルを解消する機会が多いのですが、その中でも特に頻繁に目にするのが、一時ファイルやログファイルがディスク容量を圧迫し、最終的にシステム全体の動作を遅くしてしまうという問題です。
インターネット一時ファイルフォルダはよくある原因の一つですが、こちらは解決策が簡単です。コントロールパネルの「インターネットオプション」から、ファイルを自動削除するよう設定するだけで済みます。しかし、厄介なのはWindowsの一時フォルダ(Tempフォルダ)や、アプリケーションが勝手に溜め込むログファイルです。最初はさほど問題になりませんが、時間が経つにつれて、何の役にも立たない古いファイルの山へと膨れ上がっていきます。
きちんと作られたアプリケーションなら、不要になったログや一時ファイルを自分で削除してくれます。ところが、後始末をきちんとしないプログラムも少なくなく、その結果、数年後にはPCの中が散らかり放題になってしまいます。ただし、Windowsの一時フォルダやウイルス対策ソフトの通知ログフォルダなど、特定のログフォルダの場所が分かっているなら、次に紹介するWindowsスクリプトを使えば、数日以上前の古いログファイルを定期的に自動削除できます。
Windowsスクリプトで一時ファイルをクリーンアップ
Windowsスクリプトが初めてという方は、以前公開したWSHチュートリアルをぜひご覧ください。ネットワーク設定の変更や、ウイルス対策・マルウェアスキャンの自動スケジュールなど、Windowsスクリプトでできることはたくさんあります。
アプリケーションのログファイルや一時ファイルフォルダを定期的に整理したいなら、Windowsスクリプトこそが最適なソリューションです。
クリーンアップ用Windowsスクリプトの作成
このスクリプトは、指定した1つのディレクトリを対象に、更新日が数日より前のファイルを探し出して削除します。さらに、すべてのサブディレクトリに対しても同じチェックとクリーンアップを実行します。複雑そうに聞こえるかもしれませんが、実際はとてもシンプルです。スクリプトの前半は次のようになっています。
Option Explicit On Error Resume Next Dim oFSO, oFolder, sDirectoryPath Dim oFileCollection, oFile, sDir Dim iDaysOld iDaysOld = 3
この部分では、対象ディレクトリとクリーンアップしたいファイルにアクセスするためのファイルシステム変数を宣言しています。「iDaysOld」変数には、残しておきたいファイルの基準となる日数を指定します。この例では、3日以内に更新された新しいファイルは保持するようにしています。
続いて、非常にシンプルなクリーンアップ処理の部分です。
' ***** CLEAR OUT OLD FILES IN LOG FOLDER *****
sDirectoryPath = "C:\Users\Owner\AppData\Local\Temp\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files
For Each oFile In oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
上記のセクションでは、Windowsファイルシステムに接続し、「sDirectoryPath」変数で指定したディレクトリにアクセスします。最初のループでは、ディレクトリ内の各ファイルについて最終更新日を確認し、あらかじめ定義した保存期間と比較します。3日より古いファイルであれば、削除処理を実行します。
これでファイルの削除は問題なく行えますが、Windowsの一時フォルダのようにサブディレクトリを含むフォルダの場合はどうでしょうか? スクリプトの次のセクションでは、すべてのサブディレクトリを走査し、そこにあるファイルにも同じ操作を適用します。
For Each oSubFolder In oSubFolders
sDirectoryPath = "C:\Users\Owner\AppData\Local\Temp\" & oSubFolder
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files
For Each oFile In oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
If oSubFolder.Size = 0 Then oSubFolder.Delete(True)
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
Next
最後に、サブディレクトリが存在しなかった場合に備えて、使用したオブジェクトを解放する処理を忘れずに追加してください。
Set oFSO = Nothing Set oFolder = Nothing Set oFileCollection = Nothing Set oFile = Nothing WScript.Quit
これだけです。上記のスクリプトを使えば、任意のフォルダを自由にクリーンアップできます。定期的に掃除したいディレクトリごとに個別のスクリプトを作成し、「sDirectoryPath」に対象のディレクトリを設定して、「C:\temp\」や「C:\vbscripts\」のような専用フォルダに保存しておきましょう。スクリプトの準備が整ったら、次はスケジュール設定です。
クリーンアップスクリプトのスケジュール設定
Windows 7でクリーンアップスクリプトを定期実行するには、管理ツールから「タスクスケジューラ」を開きます。
「操作」メニューから「基本タスクの作成」を選択します。
続いて、そのディレクトリを掃除したいタイミングに合わせて繰り返しスケジュールを設定します。私の場合、普段必ずPCにログインして作業している日曜日の正午にクリーンアップスクリプトを実行するようにしています。スクリプトはバックグラウンドで静かに動作するので、作業の邪魔になりません。
なお、個々のログや一時ディレクトリを掃除するために作成したWindowsスクリプトごとに、それぞれスケジュールタスクを設定する必要があります。
タスクスケジューラでスクリプトを登録したら、「操作」→「実行」をクリックすればすぐにテストできます。
すると、ログまたは一時フォルダ内の数日より古いファイル(スクリプトの設定内容によります)がすべて自動的に削除されるのが確認できるはずです。私の場合はWindowsの一時フォルダを週に一度クリーンアップしています。このスクリプトを実行したところ、サブディレクトリ内のファイルも含めて、フォルダ内の約45ファイルが最新の20ファイルほどまで減りました。
パソコンのメンテナンスは本当に骨の折れる作業です。しかも、システムやさまざまなアプリケーションが絶えずログファイルに書き込み、Windowsの一時フォルダにジャンクファイルを溜め込んでいくとなれば、その負担はさらに増していきます。このスクリプトは、サーバー上でバッチジョブやスクリプトを定期実行し、そのたびに新しいログファイルが生成されるような環境で働くIT技術者にとって特に有用です。古いログファイルを定期的に削除するWindowsスクリプトを仕掛けておけば、上記のようなWSFファイルでログディレクトリを常に清潔に保てます。必要な履歴ログは残しつつ、本当に古い不要なログだけを効率よく削除できるのです。
こんなスクリプトのクリエイティブな活用法が思いつきますか? 一時フォルダやログファイルを今も手動で掃除しているなら、このようなスクリプトで作業を大幅に省力化できるかもしれません。ぜひ試してみて、コメント欄で感想やフィードバックをお聞かせください!
画像クレジット:Crane at Junk Yard via Shutterstock
-
Windows でフォルダまたはファイルをパスワードでロックする方法
不正アクセスから保護するために、フォルダやファイルをパスワードでロックする必要がある場合があります。この記事には、パスワードを持っていない人がアクセスできないようにするために、Windows OS のフォルダまたはファイルをパスワードで保護するための最も安全な無料の方法が含まれています。 ファイルをロック/暗号化する前のヒント: 1. ファイルをロックするときは常に強力なパスワードを使用し、安全な場所にメモしておいてください。2. EFS または BitLocker 暗号化を使用する場合は、暗号化されたファイルと回復キーを必ず別のデバイス (外付け USB ドライブなど) にバックアッ
-
Windows 11で一時ファイルを削除する5つの方法|初心者向けに徹底解説
Windows 11における一時ファイル(テンポラリファイル)とは、アプリやオペレーティングシステムが動作の安定性と一貫性を保つために保存するデータのことです。ログファイル、システムキャッシュ、その他の非永続的なデータが含まれており、通常はPCの正常な動作に悪影響を与えるものではありません。しかし、PCを長期間使用していると、一時ファイルは徐々に大量に蓄積されていきます。使わなくなったサードパーティ製アプリがTempフォルダに数GBものデータを残していることもあれば、プログラムがタスク完了後にTempフォルダを正しくクリアしないケースもあります。こうした状況では、Windows 11から一時フ