【JScript】ディレクトリ内の全てのファイルを開き特定文字を置換する(行単位)

対象ディレクトリ内のファイルを行単位で読込み、置換を行います。
今回はテキストエリアの中身をCSVに出力したファイルの末尾が改行になっているものを
強制的に除去しているだけで、実際は置換していません。

対象の大量ファイルは「C:/replaceBefore」にあるとし、
置換後の大量ファイルを作成するために「C:/replaceAfter」を作成しておきます。

var fso = new ActiveXObject("Scripting.FileSystemObject");
var files = fso.GetFolder("D:/replaceBefore").Files;
var e = new Enumerator(files);
// ディレクトリ内の全てのファイル分繰り返す。
for ( ; !e.atEnd(); e.moveNext()) {
    var file = e.item();
    var fileFullPathBefore = "D:/replaceBefore/" + file.Name;
    var fileFullPathAfter  = "D:/replaceAfter/" + file.Name;
    WScript.Echo(fileFullPathBefore + "を処理します。");

    // 入力ファイルの設定
    // Typeの設定値
    // 1:バイナリを表す。
    // 2:既定値。charsetで指定した文字セットで文字列を表す。
    var sr = new ActiveXObject("ADODB.Stream");
    sr.Type = 2;
    sr.charset = "utf-8";
    sr.Open();
    sr.LoadFromFile(fileFullPathBefore);

    // 出力ファイルの設定
    var sw = new ActiveXObject("ADODB.Stream");
    sw.Type = 2;
    sw.charset = "utf-8";
    sw.Open();

    // 入力ファイルの読込み
    // 入力ファイルがEOSになるまで繰り返す。
    while (!sr.EOS) {

        // ReadTextの第1引数
        // -1:既定値。EOSマーカーに達するまですべてのバイトをストリームから読み取る。
        // -2:改行までの行をストリームから読み取る。改行はLineSeparatorの設定値依存。
        var temp = sr.ReadText(-2);

        // 置換文字列検索用
        // RegExpの第2引数に'g'を指定すると全置換になる。
//        var reg = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{7}");
//        var reg = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]{7}", 'g');
//        temp = temp.replace(reg, "");

        // 出力ファイルの書込み
        // WriteTextの第2引数
        // ActiveXObjectのTypeが文字列(2)の場合に利用する。
        // 0:既定値。文字列を書き込む。
        // 1:文字列+改行を書き込む
        // 末尾の1文字を取得する。
        var lastWord = temp.slice(-1);
        // 末尾がダブルクォートである場合
        if (lastWord == "\"") {
//            WScript.Echo("ダブルクォート");
            // 文字列+改行を書き込む。
            sw.WriteText(temp, 1);
        // 末尾がダブルクォート以外である場合
        } else {
//            WScript.Echo("違う");
            // 文字列を書き込む。
            sw.WriteText(temp, 0);
        }
    }

    // 書き込みの文字コードがUTF-8の場合、BOMが付与されるため、除去する。
    // 書き込んだオブジェクトのポジションをゼロに戻し、
    // バイナリモードを指定した上で、ポジションを3byte分ずらし、再書き込みする。
    // この処理順序は変更不可。
    if (sw.charset == "utf-8") {
        sw.Position = 0;
        sw.Type = 1;
        sw.Position = 3;
        var textBinary = sw.Read();
        sw.Close();
        sw.Type = 1;
        sw.Open();
        sw.Write(textBinary);
    }

    sr.Close();
    sr = null;

    // 出力ファイルの保存
    // SaveToFileの第2引数
    // 1:既定値。ファイルがない場合、新規作成する。ファイルがある場合、上書きしない。
    // 2:ファイルがない場合、新規作成する。ファイルがある場合、上書きする。
    sw.SaveToFile(fileFullPathAfter, 2);
    sw.Close();
    sw = null;
}
fso = null;