(view source code of vbs2cmd.vbs as plain text)
'Author: Denis St-Pierre (Ottawa, Canada)'Purpose: Ever wanted to run a VBS script from a CMD but do it all from ONE file.' This converts a VBS file into a CMD Subroutine that recreates' The VBS code in \%TEMP%\ folder and launches it from inside that CMD.' The name of the Subroutine matches the name of the VBS file.'' DISCLAIMER: Use at your own risk! ' The author and whatever website you got this from is NOT responsible for anything that could go wrong'' License: Public Domain'History:' 1.0 2Feb2010 Initial release' 1.1 30May2010 Command line arguments added by Rob van der Woude, to allow use in non-XP Windows versions' 1.2 7Aug2014 Bug with output file names in non-root folders fixed by Rob van der Woude''Features: Handles symbols that needs to be escaped for CMD's Echo to work' Output is a fully functional CMD scriptOption ExplicitConst ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const TristateUseDefault = -2
Dim arrVBStextDim blnQuietDim intOVRWT, intResult, intValidArgsDim objDialog, objFile, objFSO, wshShellDim strBaseFileName, strCMDout, strFileName, strFileNameIN, strFileNameOUTDim strNewText, strOldText, strText, strVBSlineWith WScript.Arguments
If .Unnamed.Count > 1 Then Syntax
intValidArgs = 0
If .Unnamed.Count = 1 Then
strFileNameIN = .Unnamed(0)
intValidArgs = intValidArgs + 1
End If
If .Named.Exists( "Q" ) Then
blnQuiet = True
intValidArgs = intValidArgs + 1
End If
If intValidArgs <> .Count Then Syntax
End With
Set WshShell = WScript.CreateObject( "WScript.Shell" )
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
If strFileNameIN = "" Then
'File browse dialog box (XP only) (NFG in 7/2008, Thank you MS!)On Error Resume Next
Set objDialog = CreateObject( "UserAccounts.CommonDialog" )
If Err Then
strFileNameIN = ""
WScript.Echo "No file specified."
ElseobjDialog.Filter = "All Files|*.*"
objDialog.InitialDir = wshShell.CurrentDirectory
intResult = objDialog.ShowOpen
If intResult = 0 Then
strFileNameIN = ""
wshShell.Popup "No file selected.", 1, " ", 64
ElsestrFileNameIN = objDialog.FileName
End If
Set objDialog = Nothing
End If
Set objDialog = Nothing
On Error Goto 0
End If
If strFileNameIN = "" Then Syntax
strFileNameOUT = objFSO.Buildpath( objFSO.GetParentFolderName( strFileNameIN ), objFSO.GetBaseName( strFileNameIN ) & "_CONVERTED.CMD" )
'Check if strFileNameOUT exists alreadyIf objFSO.FileExists( strFileNameOUT ) Then 'does the file EXIST?
If blnQuiet Then
WScript.Echo "Deleting existing file."
objFSO.DeleteFile( strFileNameOUT )
ElseintOVRWT = MsgBox( strFileNameOUT & " exists already" & vbCrLf & "Overwrite?", vbYesNoCancel, "Overwrite?" )
If intOVRWT = 6 Then
'proceedobjFSO.DeleteFile( strFileNameOUT )
ElsewshShell.Popup "Exiting as requested.", 1, " ", 64
WScript.Quit
End If
End If
End If
'open strFileNameANSI file, and put entire file into a variableSet objFile = objFSO.OpenTextFile( strFileNameIN, ForReading )
strText = objFile.ReadAll
objFile.Close
'************ Start converting *************'^ Escape character.' Adding the escape character before a command symbol' allows it to be treated as ordinary text. 'When piping or redirecting any of these characters you should'prefix with the escape ^ character: \ & | > < ^'e.g. ^\ ^& ^| ^> ^< ^^ '# Escape out ^ symbols (Must be 1st !!!)strOldText = "^"
strNewText = "^^"
strText = Replace( strText, strOldText, strNewText )
'# Escape out \ symbols'strOldText = "\"'strNewText = "^\"'strText = Replace( strText, strOldText, strNewText )'# Escape out & symbolsstrOldText = "&"
strNewText = "^&"
strText = Replace( strText, strOldText, strNewText )
'# Escape out | symbolsstrOldText = "|"
strNewText = "^|"
strText = Replace( strText, strOldText, strNewText )
'# Escape out > symbolsstrOldText = ">"
strNewText = "^>"
strText = Replace(strText, strOldText, strNewText)
'# Escape out < symbolsstrOldText = "<"
strNewText = "^<"
strText = Replace( strText, strOldText, strNewText )
'Converting into array'Dim arrVBStext()arrVBStext = Split( strText, vbCrLf ) 'create one-dimensional array
strFileName = objFSO.GetFileName( strFileNameIN )
strBaseFileName = objFSO.GetBaseName( strFileNameIN )
strCMDout = ""
strCMDout = strCMDout & "@ECHO OFF" & vbCrLf
strCMDout = strCMDout & "Call :" & strBaseFileName & vbCrLf
strCMDout = strCMDout & vbCrLf
strCMDout = strCMDout & vbCrLf
strCMDout = strCMDout & "REM Prevent running the " & strFileName & " twice" & vbCrLf
strCMDout = strCMDout & "Exit /b 0" & vbCrLf
strCMDout = strCMDout & ":" & strBaseFileName & vbCrLf
strCMDout = strCMDout & "REM This will create a file called " & strFileName & " in %TEMP%" & vbCrLf
strCMDout = strCMDout & "REM" & vbCrLf
strCMDout = strCMDout & "REM The following will overwite any pre-existing file called %TEMP%\" & strFileName & vbCrLf
strCMDout = strCMDout & "echo.> %TEMP%\" & strFileName & vbCrLf
'Add Echo in front and >> %TEMP%\<VBSNAME>.VBS at the end of every lineFor Each strVBSline in arrVBStext
If Trim( strVBSline ) = "" Then
strCMDout = strCMDout & "echo. >> %TEMP%\" & strFileName & vbCrLf
ElsestrCMDout = strCMDout & "echo " & strVBSline & " >> %TEMP%\" & strFileName & vbCrLf
End If
NextstrCMDout = strCMDout & "Cscript.exe //NoLogo ""%TEMP%\" & strFileName & """" & vbCrLf
strCMDout = strCMDout & "Exit /b 0" & vbCrLf
'Converting done'Write to fileSet objFile = objFSO.OpenTextFile( strFileNameOUT, ForAppending, True )
objFile.WriteLine strCMDout
objFile.Close
If blnQuiet Then
WScript.Echo "created " & strFileNameOUT
ElsewshShell.Popup "created " & strFileNameOUT, 3, "Completed", 64
End If
Set objFile = Nothing
Set wshShell = Nothing
Set objFSO = Nothing
Sub Syntax Dim strMsg strMsg = vbCrLf _& "Usage: VBS2CMD.VBS vbscript_file.vbs [ /Q ]" & vbCrLf & vbCrLf _
& "Where: vbscript_file.vbs is the file to be ""converted""" & vbCrLf _
& " (mandatory in all Windows versions except XP)" & vbCrLf _
& " /Q prevents popup dialogs"
WScript.Echo strMsg
WScript.Quit 1
End Sub
page last modified: 2025-10-11; loaded in 0.0095 seconds