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が使えない環境なんて考えにくいので、もう不要ですな。