バイナリーファイルをwsh javascriptにするjscript

前にbase64変換を書いたが、よくよく考えると復号するスクリプトがついてた方がいろいろと便利なことに気づいた。
WSHでバイナリー・テキスト相互変換(Base64変換) - じゅんじゅんのきまぐれ
ということで書いてみた。



js

WScript.Quit((function() {
	// 入力ファイルを受け取る
	if(WScript.Arguments.length < 1) {
		WScript.Echo("args : (path)");
		return 1;
	}
	
	// ファイル読込み
	var ins = WScript.CreateObject('ADODB.Stream');
	ins.Open();
	ins.Charset = 'iso-8859-1';
	ins.Type = 1;	// Binary
	ins.LoadFromFile(WScript.Arguments.item(0));
	
	// 出力
	var msg = WScript.Arguments.item(0).replace(/^.*\\/, "") + "'";
	WScript.Echo("WScript.Quit((function(){c='" + msg);
	WScript.Echo("d=function(e){a.text=e;b.Write(a.nodeTypedValue)}");
	msg = "var a=WScript.CreateObject('Microsoft.XMLDOM').createElement('t');";
	WScript.Echo(msg + "a.dataType='bin.base64'");
	msg = "var b=WScript.CreateObject('ADODB.Stream');b.Open();";
	WScript.Echo(msg + "b.Charset='iso-8859-1';b.Type=1");
	
	// 変換しながら出力
	var binMan = WScript.CreateObject('Microsoft.XMLDOM').createElement('t');
	binMan.dataType = 'bin.base64';
	var loop = true;
	while(loop) {
		binMan.nodeTypedValue = ins.Read(54);
		loop = (binMan.text.length > 0);
		if(loop) WScript.Echo("d('" + binMan.text + "')");
	}
	ins.Close();
	ins = null;
	binMan = null;
	
	WScript.Echo("a=null;b.SaveToFile(c,2);b.Close();b=null;return 0})())");
	
	return 0;
})());

更新日時が失われる?
圧縮して書庫に持たせてください。


これで、ブログ記事からバイナリー持込放題、、、。