JScript でテキストファイルの文字列を置換する

今回は、JScript を用いてテキストファイルの文字列を置換するスクリプトを作りました。

スクリプト

// FileName: replaceText.js

var args = WScript.Arguments;
if (args.Length < 3) {
	WScript.Echo('Usage: cscript replaceText.js 入力ファイル名 置換前テキスト 置換後テキスト');
	WScript.Quit(1);
}

var srcfile = args(0);
var srckwd = args(1);
var dstkwd = args(2);
var retcode = 0;
var strm = null;

var fso = new ActiveXObject('Scripting.FileSystemObject');

try {
	strm = fso.OpenTextFile(srcfile);
} catch (e) {
	WScript.StdErr.WriteLine('Error: ' + e.description);
	WScript.Quit(e.number & 0xFFFF);
}

try {
	while (!strm.AtEndOfStream) {
		WScript.Echo(strm.ReadLine().replace(srckwd, dstkwd));
	}
} catch (e) {
	WScript.StdErr.WriteLine('Error: ' + e.description);
	retcode = e.number & 0xFFFF;
} finally {
	strm.Close();
}

strm = null;
fso = null;

WScript.Quit(retcode);

使い方

コマンドプロンプトで下記のように指定してください。

cscript replaceText.js 入力ファイル名 置換前テキスト 置換後テキスト

WSH のロゴを表示したくない場合は、下記のように指定してください。

cscript //NoLogo replaceText.js 入力ファイル名 置換前テキスト 置換後テキスト

実行例

下記のテキストファイルを入力とします。

C:\Windows\System32\drivers\1394bus.sys
C:\Windows\System32\drivers\1394ohci.sys
C:\Windows\System32\drivers\acpi.sys
C:\Windows\System32\drivers\acpipmi.sys
C:\Windows\System32\drivers\adp94xx.sys
C:\Windows\System32\drivers\adpahci.sys
C:\Windows\System32\drivers\adpu320.sys
C:\Windows\System32\drivers\afd.sys
C:\Windows\System32\drivers\agilevpn.sys
C:\Windows\System32\drivers\AGP440.sys

「C:\Windows\System32」を「D:」に置き換えてみます。
実行すると置換済みのテキストが出力されます。

C:\>cscript //NoLogo replaceText.js input.txt C:\Windows\System32 D:
D:\drivers\1394bus.sys
D:\drivers\1394ohci.sys
D:\drivers\acpi.sys
D:\drivers\acpipmi.sys
D:\drivers\adp94xx.sys
D:\drivers\adpahci.sys
D:\drivers\adpu320.sys
D:\drivers\afd.sys
D:\drivers\agilevpn.sys
D:\drivers\AGP440.sys

補足

スクリプトで扱えるテキストの文字コードは「Shift-JIS」です。
Unicode を扱いたい場合は、OpenTextFile のパラメータを変更するなどの修正が必要です。