Contigを使って定期的にデフラグするように設定した
デフラグ重要
私は仕事でWindows XPを使っています。最近、妙に動きが遅いと感じていました。ふとデフラグツールで確認してみたところ、ハードディスクのフラグメントが非常に進んでいることがわかりました。そこで、デフラグしたところ、動作が速くなり、快適になりました。
私はデフラグすること忘れてしまいがちで、知らず知らずのうちにパソコンが遅くなっていることが多くあります。Windows Vistaでは、週に1回、自動的にデフラグが実行されます。私が使っているWindows XPでも、週に1回、自動的にデフラグが実行されるようにしようと考えました。
Contigというデフラグツールがある
デフラグをかける場合、ハードディスク全体にかけると時間がかかります。VirtualPCの仮想ハードディスクなどの巨大なファイルは除外したいと考えていました。調べてみたところ、Contigというプログラムがあり、特定のフォルダや特定の拡張子など、選択的にデフラグできることがわかりました。
contigツールでファイルを個別にデフラグする − @IT
このContigを使い、プログラムの実行にかかわりの深いファイル(*.exeと*.dll)だけデフラグしようと考えました。
Contigを使ってデフラグするスクリプト
まず、次の場所にある*.exeと*.dllだけにデフラグをかけるスクリプトを作成しました。
- ウィンドウズのシステムフォルダ
- Program Files
- マイドキュメントにあるプログラムフォルダ
マイドキュメントにあるプログラムフォルダというのは、インストール不要のプログラムを私が格納している場所です。
auto_contig.cmd:
@echo off rem defrag with contig only executable files. set CONTIG="C:\Documents and Settings\maru\My Documents\program\Contig\Contig.exe" call :contig_executable_files "%WINDIR%" call :contig_executable_files "%ProgramFiles%" call :contig_executable_files "%HOMEDRIVE%%HOMEPATH%\My Documents\program" goto :EOF :contig_executable_files call :contig "%~1\*.exe" "%~1\*.dll" exit /b :contig %CONTIG% -s %* exit /b
タスクで実行する(失敗)
このバッチファイルをWindowsのコントロールパネルにあるタスクで実行します。次の条件で実行することを考えます。
- 実行時のウィンドウは最小化する
- 他のプロセスよりも低い優先度で実行する
これらはstartコマンドに次のオプションをつけることで実現できます。
/min /low
コントロールパネル>タスクの「スケジュールされたタスクの追加」を実行し、新しいタスクに次のように記入しました。
start /min /low auto_contig.cmd
また、「開始」に、auto_contig.cmdが置かれているディレクトリを記入しました。実行してみると、状態が「開始できませんでした」になりました。startが実行できなかったようです。どうやらstartはcmd.exeに含まれるサブコマンドらしく、単体では実行できない(start.exeやstart.comが存在しない)ようです。
そこで、次のようにcmdを付けました。
cmd /c start /min /low auto_contig.cmd
“/c”は実行後にコマンドプロンプトを終了するためのオプションです。実行したところ、最小化されたコマンドプロンプトでauto_contig.cmdが実行されました。しかし、実行が終了しても、コマンドプロンプトは閉じませんでした。ここは自動で閉じて欲しいところです。
タスクで実行する(成功)
startはバッチファイルの実行の際、新しいコマンドプロンプトを開きます。上記でcmdに“/c”オプションを付けましたが、これはstart自体が自動で終了する意味となり、新しいコマンドプロンプトは終了しません。
バッチファイルの実行後にコマンドプロンプトを終了するには、startに渡すコマンドリストの頭にも“cmd /c”をつける必要があるようです。というわけで、次のように書きました。
cmd /c start /min /low cmd /c auto_contig.cmd
これでうまく動くようになりました。それぞれの意味は以下の通りです。
記述 | 目的・意味 |
---|---|
cmd | startを実行するために必要 |
/c | startの実行後にコマンドプロンプトを閉じる |
start | 優先度などを指定してプログラムを実行する |
/min | プログラムのウィンドウを最小化する |
/low | プログラムの優先度を「低」にする |
cmd /c | バッチファイルの実行後にコマンドプロンプトを閉じる |
auto_contig.cmd | 実行するバッチファイル名 |
なお、実行時には最小化されるのとは別のコマンドプロンプトが一瞬だけ表示されます。表示されない方がいいですが、そのための方法がわからなかったのと、一瞬だけなので、気にしないことにしました。表示しない方法を知っている方がいましたら教えてください。
バッチファイルの文法についての参考ページ
バッチファイルについて、非常にわかりやすく、よくまとまっているページを発見しました。
バッチメモ(Hishidama's bat-file Memo)
このページのおかげで、バッチファイル内でのサブルーチンコールの方法を知ることができました。ありがとうございます。