保守開発において改修前後で比較することが多いですが、
ファイル内に自動で更新日時が入るようなファイルが大量にある場合、
更新日時をある一定の文字に置換し、改修前後で比較可能にします。
対象の大量ファイルは「C:/replaceBefore」にあるとし、
置換後の大量ファイルを作成するために「C:/replaceAfter」を作成しておきます。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var files = fso.GetFolder("C:/replaceBefore").Files;
var e = new Enumerator(files);
// ディレクトリ内の全てのファイル分繰り返す。
for ( ; !e.atEnd(); e.moveNext()) {
var file = e.item();
var fileFullPathBefore = "C:/replaceBefore/" + file.Name;
var fileFullPathAfter = "C:/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);
// 入力ファイルの読込み
// ReadTextの第1引数
// -1:既定値。EOSマーカーに達するまですべてのバイトをストリームから読み取る。
// -2:改行までの行をストリームから読み取る。改行はLineSeparatorの設定値依存。
var temp = sr.ReadText(-1);
// WScript.Echo(temp);
sr.Close();
sr = null;
// 出力ファイルの設定
var sw = new ActiveXObject("ADODB.Stream");
sw.Type = 2;
sw.charset = "utf-8";
sw.Open();
// 置換文字列検索用
// 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');
// 出力ファイルの書込み
// WriteTextの第2引数
// ActiveXObjectのTypeが文字列(2)の場合に利用する。
// 0:既定値。文字列を書き込む。
// 1:文字列+改行を書き込む
sw.WriteText(temp.replace(reg, ""), 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);
}
// 出力ファイルの保存
// SaveToFileの第2引数
// 1:既定値。ファイルがない場合、新規作成する。ファイルがある場合、上書きしない。
// 2:ファイルがない場合、新規作成する。ファイルがある場合、上書きする。
sw.SaveToFile(fileFullPathAfter, 2);
sw.Close();
sw = null;
}
fso = null;