ファイルを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になる、ということです。