新年度が始まってしばらく経ち、みなさんのデスクトップやマイドキュメントにファイルはあふれていませんでしょうか。今回作るのは、そのような方におすすめの、一定期間利用されていないファイルを自動的に整理するというツールです。

 Windows XPには、デスクトップにあるショートカットで一定期間利用されていないものを自動的に移動する機能が備わっていました。意外と便利な機能だと思っていたのですが、Windows Vistaでは廃止されてしまいました。筆者は以前から、この機能、デスクトップだけでなくマイドキュメントにも適用できないかなぁと思っていました。

 というのも、友人のパソコンが調子悪いので見てほしいと頼まれたときに、マイドキュメントを見てみたら、なんとそこには、パソコンを買ったときからコツコツ作ってきたExcelやWordなどのファイルが全部入っていたんです。さすがにファイルの消し方を知らないはずはないと思うのですが、フォルダーを作ることもなく、数百個のファイルがずらっと並んでいました。「これでは必要なときにファイルを探せないのでは?」とたずねると、「いらないファイルがたくさんあると思うんだけど、よく分からないし、面倒だからそのままになっている」とのことでした。

 そこで、最近利用したファイルだけをマイドキュメントに残し、使っていないファイルを「未使用2011-05」などというフォルダーを作ってそこに移動するよう整理したらどうかと提案したのですが、手作業でやるのは結構面倒です。そもそも、面倒だからファイルがあふれている状態のまま整理していないのです。現実の世界では、それでも手作業で片付けるしかありませんが、パソコンの中ならば、プログラムを作って、定期的に整理するよう自動化することができます。

一定期間利用されていないファイルを移動するツールのプログラム

 ここで紹介するプログラムは、一定期間更新されていないファイルをサブフォルダーへ移動するツールです。Windows 2000/XP以降で実行できます。

 以下のプログラムを、テキストエディターに貼り付け、「move-old-file.jse」という名前で保存します。保存したファイルは、ダブルクリックで実行できます(うまく保存ができない方は、こちらからダウンロードしてご利用ください)。

 プログラムを配置したフォルダー内のファイルについて移動処理を行います。そのため、マイドキュメントを整理したい方は、マイドキュメントへこのプログラムをコピーして実行します。

//--------------------------------------------------------------------
// 一定期間更新していないファイルをフォルダに移動するツール
//--------------------------------------------------------------------
// 初期化
var fso = WScript.CreateObject("Scripting.FileSystemObject");
// このプログラムの起動パス
var curPath = fso.GetFile(WScript.ScriptFullName).ParentFolder.Path;
// 古いファイルの移動先フォルダのパス(フォルダに今月の日付を入れる)
var now = new Date();
var oldPath = curPath + "¥¥未使用" + 
      now.getFullYear() + "-" + (now.getMonth()+1);
// 未使用を許容する日付(ここでは、90日を指定)
var expires = 90;
// 処理を実行する
moveOldFile(curPath, oldPath, expires);
//--------------------------------------------------------------------
function moveOldFile(curPath, oldPath, expires) {
  // 指定パスのファイル一覧を得る
  var files = fso.GetFolder(curPath).Files;
  var moveCount = 0;
  // ファイルを一つずつ処理する
  var e = new Enumerator(files);
  for ( ; !e.atEnd(); e.moveNext()) {
    var file = e.item();
    var dla = new Date(file.DateLastModified);
    var diff = (now.getTime() - dla.getTime()) / (1000 * 60 * 60 * 24);
    if (diff > expires) { // 移動が必要か?
      if (!fso.FolderExists(oldPath)) fso.CreateFolder(oldPath);
      file.Move(oldPath+"¥¥");
      moveCount++;
    }
  }
  WScript.Echo("ファイルを "+moveCount+" 個移動しました!");
}
//--------------------------------------------------------------------

 ※このプログラムは、対象となるフォルダーにあるファイルに対してのみ移動処理を行います(サブフォルダーのファイルについては、移動を行いません)。移動したファイルを元に戻したいときは、サブフォルダーから対象となるフォルダー(マイドキュメントなど)にファイルを戻してください。