'
' - Execute from command line: wscript FileToBASE64.vbs
'
' - Reads file from arguments
' - Encodes file's byte array to Base64 string
' - Saves BASE64 ascii representation to disk
'
' - Anastasios Monachos - anastasiosm@gmail.com
'

Option Explicit
Dim arguments, inFile, outFile	' getting file as argument

Set arguments = WScript.Arguments
inFile = arguments(0)
outFile = inFile & "_base64.txt"

Dim inByteArray, base64Encoded, fileToWriteBASE64

inByteArray = readBytes(inFile)
base64Encoded = encodeBase64(inByteArray)

saveToFile(base64Encoded)
Wscript.echo "Base64 encoded data saved to : " + outFile 

private function readBytes(file)
	dim inStream
	set inStream = WScript.CreateObject("ADODB.Stream")
	inStream.Open	' open with no arguments makes the stream an empty container
	inStream.type= 1	'1 means type is Binary
	inStream.LoadFromFile(file)
	readBytes = inStream.Read()
end function

private function encodeBase64(bytes)
	dim DM, EL
	Set DM = CreateObject("Microsoft.XMLDOM")
	Set EL = DM.createElement("tmp")	' Create temporary node with Base64 data type
	EL.DataType = "bin.base64"
	EL.NodeTypedValue = bytes	' Set bytes, get encoded String
	encodeBase64 = EL.Text
end function

private function saveToFile(dataInASCII)
	Set fileToWriteBASE64 = CreateObject("Scripting.FileSystemObject").OpenTextFile(outFile,2,true) '2 means ForWriting
	fileToWriteBASE64.WriteLine(dataInASCII)
	fileToWriteBASE64.Close
	Set fileToWriteBASE64 = Nothing
end function
