ファイルをUWSCスクリプトにするスクリプト
以前書いたバイナリーファイルをjsにするスクリプトのUWSC版。
バイナリーファイルをwsh javascriptにするjscript - じゅんじゅんのきまぐれ
気が向いたので書いてみた。
スクリプト
実行すると、INPUTを表示するので、パスを入力(Drag&Drop)してください。
ログに、変換後スクリプトを出力します。
OPTION EXPLICIT Main(PARAM_STR) FUNCTION Main(para[]) RESULT = 1 // 入力ファイル名を受け取る DIM path = EMPTY, name = "_|", suffix = "|" IFB LENGTH(para) < 1 THEN path = INPUT("スクリプト化するファイルを指定してください") ELSE path = para[0] ENDIF IF LENGTH(para) > 1 THEN name = para[1] IF LENGTH(para) > 2 THEN suffix = para[2] // ファイル読込み DIM ins = CreateOleObj("ADODB.Stream") ins.Open() ins.Type = 1 // Binary ins.LoadFromFile(path) // 前出力 Log("TEXTBLOCK " + name + FORMAT(suffix,3)) // バイト配列操作用オブジェクト DIM dom = CreateOleObj("Microsoft.XMLDOM"), binMan = dom.createElement("tmp") binMan.dataType = "bin.base64" DIM loop = TRUE WHILE loop binMan.nodeTypedValue = ins.Read(54) loop = (LENGTH(binMan.text) > 0) IF loop THEN Log(binMan.text) WEND ins.Close() ins = Nothing binMan = Nothing dom = Nothing // 後出力 path = COPY(path, POS("\", path, -1) + 1) Log("ENDTEXTBLOCK") dom = "DIM " + name + FORMAT(suffix,2) + "=CreateOleObj(<#DBL>Microsoft.XMLDOM<#DBL>)," dom = dom + name + suffix + "=" + name + FORMAT(suffix,2) + ".createElement(<#DBL>t" dom = dom + "<#DBL>)," + name + "=CreateOleObj(<#DBL>ADODB.Stream<#DBL>)" Log(dom) dom = name + suffix + ".dataType=<#DBL>bin.base64<#DBL>;" + name + suffix + ".text=" dom = dom + name + FORMAT(suffix,3) + ";WITH " + name + ";.Open();.Type=1;.Write(" dom = dom + name + suffix + ".nodeTypedValue);.SaveToFile(<#DBL>" dom = dom + path + "<#DBL>,2);.Close();ENDWITH" Log(dom) RESULT = 0 FEND PROCEDURE Log(msg) PRINT msg FEND
ファイル本体は、TEXTBLOCKにBase64エンコードして格納しています。
最後の二行が、それをファイル化するスクリプト。
元のファイル名で、スクリプトのあるフォルダに作成するようになっているので、変更したい場合は、SaveToFileのパスを修正してください。
ファイルが多い場合、TEXTBLOCKの名前を変えて、最後の二行は関数化するのがおススメです。
TEXTBLOCKは一行72文字にしています。
変えたい場合は、「binMan.nodeTypedValue = ins.Read(54)」の「54」を変更してください。
Base64エンコードは、元のデータを4/3倍するので、54*4/3=72と、72文字になっています。
いつ使うの?
スクリプトにファイルを同梱したい場合、便利だと思いますよ〜。多分。
EXE化ももちろんOK。
ファイルを内包したEXEになる、ということです。