But I wanted to distribute a single batch file. Not a batch file and a VBScript file.
I also wanted to keep my script in batch - why? Because I like batch!
So here is what I came up with. It's pretty elegant compared to some of the other methods to do this I've seen.
@echo off echo Testing... call :EXTRACTVBS START_RESOLVE_VBS Resolve.vbs goto :EOF :EXTRACT set START= for /f "tokens=*" %%A in ('type %~f0') do ( if defined START ( if "%%A" == "ENDVBS" goto :EOF echo %%A>>%~2 ) else ( if "%%A" == "%~1" set START=1 ) ) goto :EOF START_RESOLVE_VBS Set objFSO = CreateObject("Scripting.FileSystemObject") Set wshShell = WScript.CreateObject("WScript.Shell") Set objShortcut = wshShell.CreateShortcut(Wscript.Arguments(0)) WScript.Echo objFSO.GetFileName(Wscript.Arguments(0)) + " : " + objShortcut.TargetPath ENDVBS
Everything after START_RESOLVE_VBS is not even seen by the batch script interpreter. So you can put anything there.
The :EXTRACT function takes 2 arguments, the first is the label that starts the VBScript, the second is an output path.
With this I can include multiple VBS files, or any text file for that matter, and call :EXTRACT to extract it.