こんにちは、阿久津です。Windows OSはアプリケーションの実行時などに、"一時ファイル"と呼ばれるテンポラリファイルを生成し、さまざまな動作を実現しています。これら一時ファイルを「ディスククリーンアップ」やサードパーティ製ツールを使用し、定期的に削除している方も少なくないでしょう。不要なファイルを削除するのは、Windows OSのバージョンに左右されない、基本的なチューニングテクニックの一つです。
しかし、ディスククリーンアップを起動するには、ディスクドライブのプロパティダイアログを開き、<ディスクのクリーンアップ>ボタンをクリック、もしくはプログラムメニューをたどらなければなりません。また、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches
キーで定義された削除対象をピックアップしていきますので、項目によって待たされることもあります(図01~02)。
図02 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCachesキーには、「ディスククリーンアップ」で削除対象となる項目が並んでいます |
削除項目が列挙されるまでの遅延時間は、基本的に回避することはできませんが、「自動実行できないものか?」と考える方も少なくないでしょう。そもそもディスククリーンアップの実行ファイルである「cleanmgr.exe」には、いくつかのコマンドラインオプションが用意されています(図03)。
「/SAGESET:n」「/SAGERUN:n」はWindows XP時代から続くコマンドラインオプション。前者はクリーンアップ処理を指定した数字(n:0から65535)に登録するというもの。後者は設定した数字を元にクリアップ処理を実行します。「/SAGESET」による設定を行いますと、削除項目と連動するキー(「インターネット一時ファイル」であれば、~VolumeCaches\Internet Cache Filesキー)内にDWORD値「StateFlags」のデータ値を「1」に変更し、DWORD値「StateFlagsxxxx(xxxxは指定した数字)」のデータ値が「2」に変更されます。
「/TUNEUP:n」も前述した二つのオプションと同じく、指定した数字の設定情報を参照してクリーンアップの設定を行った後、クリーンアップ処理を実行するというもの。「/LOWDISK」は、ディスクの空き容量が少ないときの動作を示すものですが、その動作内容は不明です。逆アセンブルしないと検証できませんが、ショートカットファイルやプロパティダイアログのボタンから実行する際のコマンドラインである「/D」と同等と思われます。
「/VERYLOWDISK」はディスクの空き容量が不足した際に、システムが使用するコマンドラインオプション。Windows OSでは、空き容量不足に陥りますと自動的にディスククリーンアップを実行しますが、その際はこのオプションを使用し、非対話的にクリーンアップ処理が行われます。実行後はお馴染みのメッセージダイアログが出るため、自動実行には使用できません(図04)。
最後の「/SETUP」は残念ながら意味を見つけることができませんでした。同コマンドラインオプションを付けて実行しますと、「%windir%\Logs\DISM」フォルダーにある「dism.log」ファイルに多くのエントリーが記述されることを踏まえますと、ディスククリーンアップの動作に必要な情報を精査しているのではないかと推測します(図05)。
「/SAGESET」「/SAGERUN」以外のコマンドラインオプションは、Windows Vista以降に追加されたものですが、そのロジックを踏まえると以前から用意されていたのではないでしょうか。さて、本題に戻りましょう。ディスククリーンアップのコマンドラインオプション「/SAGESET」「/SAGERUN」を組み合わせることで、自動的にクリーンアップ処理を行うことが可能です。そこで今回は、ディスククリーンアップをタスクで自動実行するチューニングをお届けしましょう。
1.管理者権限で「cleanmgr /sageset:1」を実行します。
2.削除対象となる項目を選択してください。
3.管理者権限で「schtasks /Create /tn "AutoClean" /tr "%windir%\system32\cleanmgr.exe /sagerun:1" /sc daily /st 19:00」を実行します。
これでチューニングが終了しました(図06~08)。
図06 [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「cleanmgr /sageset:1」と入力して<OK>ボタンをクリックします。管理者権限で実行できない場合は、管理者権限を得たコマンドプロンプト上で実行してください |
早速結果を確認してみましょう。登録したタスクを確認するには「タスクスケジューラ」を使用しますが、より簡単に操作するには、コマンドプロンプト上で「schtasks /query /tn AutoClean」と実行します。図09のようにタスクが表示されれば登録完了です。後は指定した時間になりますと、ディスククリーンアップが起動し、自動的に不要なファイルを削除する処理が実行されます(図09~10)。
今回のチューニングポイントは二つ。ステップ01で指定した数字とステップ03で指定する数字が同じでなければならない点です。「/SAGESET」「/SAGERUN」の関係は前述のとおりなので特に難しくないでしょう。もう一つは、ステップ03で行ったスケジュール設定。「/Create」はタスクを作成するために必要なオプション。「/tn」オプションは作成するタスク名を記述し、「/tr」オプションは実行するプログラムやスクリプトを指定します。
「/sc」オプションはスケジュールの実行頻度を指定し、今回は"毎日19時"に実行するため上記のような内容になりました。詳しくは「schtasks /Create /?」コマンドで確認してください。また、CUI操作が苦手な方は前述のとおりタスクスケジューラのウィザード設定で作成しても可能です。なお、本チューニングが不要になった場合は、「schtasks /delete /tn "AutoClean" /f」と実行してください(図11)。
それでは、また次号でお会いしましょう。
阿久津良和(Cactus)