diruseの出力結果をCSV形式に加工する

HDDをあさったら、古いプロトタイプ・コードが見つかった。ちょっと晒してみる。

今は不明だが、かつてWindowsサーバの管理用にdiruseというコマンドがあった。Unixのduのように指定したフォルダのディスク使用量を表示するツールで、その昔はWindows Serverのリソースキットに付属していた。私がdiruseに遭遇した頃には、Microsoftのサイトからダウンロードして使用するようになっていた。

このツールが吐き出す出力をCSV形式に変換する必要が生じた。Windows Server 2003 R2上で変換したかったのだが、本番環境で使用可能なスクリプト環境がWSHしかなかった。そこでJScriptでプロトタイプを実装してみた。

それがこのコードだ。

/*jslint continue: true, indent: 2, maxerr: 50, windows: true */
WScript.Quit((function () {
  'use strict';
  var print = function (s) { WScript.Echo(s); },
    stdin = WScript.StdIn,
    line,
    fields;

  print("Size,Files,Directory");
  while (!stdin.AtEndOfStream) {
    line = stdin.ReadLine();
    fields = line.split(/\s+/);

    if (fields.length < 4) {
      continue;
    }
    if (fields[2] === "SUB-TOTAL:") {
      print([
        '"' + fields[0] + '"',
        '"' + fields[1] + '"',
        line.slice(line.indexOf(fields[3]))
      ].join(","));
    }
  }

  return 0;
}()));

diruseからパイプ経由で出力を受け取る前提で、標準入力からの入力にのみ対応している。

フォルダ名を取得する所だけ少し変わったことをしている。というのもフォルダ名に空白文字が含まれているとその部分も「line.split(/\s+/)」で分割されてしまい、fields[3]には不完全なパス文字列しか格納されないのだ。

ところで、diruseはフォルダ名に日本語が含まれていると使い物にならなかったのだが*1、サーバ上でで少しばかり特殊なアクセス権限を付加していたフォルダでも正常に使用量を取得できた唯一のツールだったため、捨てることができなくて困ったものだった。あれから、どうなったのだろうか?

*1:Windows Server 2003 R2にて確認。