WSHでバイナリー・テキスト相互変換(Base64変換)

先日、MSXMLを使うとお手軽なことがわかったので、お手軽に書いてみた。
なんとなく、JScript(javascript)。
過去にいろいろ検討したけど、もー、これでいいでしょう。



バイナリー to テキスト

WScript.Quit((function() {

	// 入力ファイル名、出力ファイル名を受け取る
	if(WScript.Arguments.length < 2) {
		WScript.Echo("args : (path) (out text file 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 binMan = WScript.CreateObject('Microsoft.XMLDOM').createElement('tmp');
	binMan.dataType = "bin.base64";
	binMan.nodeTypedValue = ins.Read()
	ins.Close()
	ins = null;

	// ファイル書き込み
	var outs = WScript.CreateObject('ADODB.Stream');
	outs.Open();
	outs.Charset = "iso-8859-1";
	outs.Type = 2;	// Text
	outs.WriteText(binMan.text);
	binMan = null;
	outs.SaveToFile(WScript.Arguments.item(1), 2);	// adSaveCreateOverWrite
	outs.Close();
	outs = null;

	return 0;
})());

テキスト to バイナリー

WScript.Quit((function() {

	// 入力ファイル名、出力ファイル名を受け取る
	if(WScript.Arguments.length < 2) {
		WScript.Echo("args : (text file path) (out path)");
		return 1;
	}

	// ファイル読み込み
	var ins = WScript.CreateObject('ADODB.Stream');
	ins.Open();
	ins.Charset = "iso-8859-1";
	ins.Type = 2;	// Text
	ins.LoadFromFile(WScript.Arguments.item(0))

	// バイト配列操作用オブジェクト
	var binMan = WScript.CreateObject('Microsoft.XMLDOM').createElement('tmp');
	binMan.dataType = "bin.base64";
	binMan.text = ins.ReadText()
	ins.Close()
	ins = null;

	// ファイル書き込み
	var outs = WScript.CreateObject('ADODB.Stream');
	outs.Open();
	outs.Charset = "iso-8859-1";
	outs.Type = 1;	// Binary
	outs.Write(binMan.nodeTypedValue);
	binMan = null;
	outs.SaveToFile(WScript.Arguments.item(1), 2);	// adSaveCreateOverWrite
	outs.Close();
	outs = null;

	return 0;
})());

使い方

それぞれのjsに、「(入力パス) (出力パス)」を渡すだけ。
コマンドプロンプトで、

cscript //nologo 〜.js (in path) (out path)

とか入れるとそれっぽい。


ADODB.StreamとMSXMLを使うと簡単ですねぇ。
一旦、どどーんとメモリーに展開されちゃうので要注意。
ちょっと改造すれば、メモリー使用量を減らすことも可能ですけどね。
ま、シンプルさは重要ですので、今回はここまで。

過去の検討はこちら

インターネットの制限された環境で - じゅんじゅんのきまぐれ
バイナリのテキスト変換 - じゅんじゅんのきまぐれ
気づいてしまった、、、。 - じゅんじゅんのきまぐれ
この面倒なスクリプトのメリットは、Base64の文字列を入れ替えられる、ということのみ。
入れ替えるだけなら、メモリー上の文字列を置換すれば良いと思われる。
Base64で使う記号は、+/=だけなので、!とか使えば安全に置換できます)
MSXMLが使えない環境なんて考えにくいので、もう不要ですな。