What is the command or the quickest way to output results to console using vbscript?

0

6 Answers

You mean:

Wscript.Echo "Like this?" 

If you run that under wscript.exe (the default handler for the .vbs extension, so what you'll get if you double-click the script) you'll get a "MessageBox" dialog with your text in it. If you run that under cscript.exe you'll get output in your console window.

4

This was found on Dragon-IT Scripts and Code Repository.

You can do this with the following and stay away from the cscript/wscript differences and allows you to get the same console output that a batch file would have. This can help if your calling VBS from a batch file and need to make it look seamless.

Set fso = CreateObject ("Scripting.FileSystemObject") Set stdout = fso.GetStandardStream (1) Set stderr = fso.GetStandardStream (2) stdout.WriteLine "This will go to standard output." stderr.WriteLine "This will go to error output." 
5

You only need to force cscript instead wscript. I always use this template. The function ForceConsole() will execute your vbs into cscript, also you have nice alias to print and scan text.

 Set oWSH = CreateObject("WScript.Shell") vbsInterpreter = "cscript.exe" Call ForceConsole() Function printf(txt) WScript.StdOut.WriteLine txt End Function Function printl(txt) WScript.StdOut.Write txt End Function Function scanf() scanf = LCase(WScript.StdIn.ReadLine) End Function Function wait(n) WScript.Sleep Int(n * 1000) End Function Function ForceConsole() If InStr(LCase(WScript.FullName), vbsInterpreter) = 0 Then oWSH.Run vbsInterpreter & " //NoLogo " & Chr(34) & WScript.ScriptFullName & Chr(34) WScript.Quit End If End Function Function cls() For i = 1 To 50 printf "" Next End Function printf " _____ _ _ _____ _ _____ _ _ " printf "| _ |_| |_ ___ ___| |_ _ _ _| | | __|___ ___|_|___| |_ " printf "| | | '_| . | | --| | | | . | |__ | _| _| | . | _|" printf "|__|__|_|_,_|___|_|_|_____|_____|___| |_____|___|_| |_| _|_| " printf " |_| v1.0" printl " Enter your name:" MyVar = scanf cls printf "Your name is: " & MyVar wait(5) 
3

There are five ways to output text to the console:

Dim StdOut : Set StdOut = CreateObject("Scripting.FileSystemObject").GetStandardStream(1) WScript.Echo "Hello" WScript.StdOut.Write "Hello" WScript.StdOut.WriteLine "Hello" Stdout.WriteLine "Hello" Stdout.Write "Hello" 

WScript.Echo will output to console but only if the script is started using cscript.exe. It will output to message boxes if started using wscript.exe.

WScript.StdOut.Write and WScript.StdOut.WriteLine will always output to console.

StdOut.Write and StdOut.WriteLine will also always output to console. It requires extra object creation but it is about 10% faster than WScript.Echo.

3

I came across this post and went back to an approach that I used some time ago which is similar to @MadAntrax's.

The main difference is that it uses a VBScript user-defined class to wrap all the logic for switching to CScript and outputting text to the console, so it makes the main script a bit cleaner.

This assumes that your objective is to stream output to the console, rather than having output go to message boxes.

The cCONSOLE class is below. To use it, include the complete class at the end of your script, and then instantiate it right at the beginning of the script. Here is an example:

 Option Explicit '// Instantiate the console object, this automatically switches to CSCript if required Dim CONS: Set CONS = New cCONSOLE '// Now we can use the Consol object to write to and read from the console With CONS '// Simply write a line .print "CSCRIPT Console demo script" '// Arguments are passed through correctly, if present .Print "Arg count=" & wscript.arguments.count '// List all the arguments on the console log dim ix for ix = 0 to wscript.arguments.count -1 .print "Arg(" & ix & ")=" & wscript.arguments(ix) next '// Prompt for some text from the user dim sMsg : sMsg = .prompt( "Enter any text:" ) '// Write out the text in a box .Box sMsg '// Pause with the message "Hit enter to continue" .Pause End With '= =========== End of script - the cCONSOLE class code follows here 

Here is the code for the cCONSOLE class

 CLASS cCONSOLE '= ================================================================= '= '= This class provides automatic switch to CScript and has methods '= to write to and read from the CSCript console. It transparently '= switches to CScript if the script has been started in WScript. '= '= ================================================================= Private oOUT Private oIN Private Sub Class_Initialize() '= Run on creation of the cCONSOLE object, checks for cScript operation '= Check to make sure we are running under CScript, if not restart '= then run using CScript and terminate this instance. dim oShell set oShell = CreateObject("WScript.Shell") If InStr( LCase( WScript.FullName ), "cscript.exe" ) = 0 Then '= Not running under CSCRIPT '= Get the arguments on the command line and build an argument list dim ArgList, IX ArgList = "" For IX = 0 to wscript.arguments.count - 1 '= Add the argument to the list, enclosing it in quotes argList = argList & " """ & wscript.arguments.item(IX) & """" next '= Now restart with CScript and terminate this instance oShell.Run "cscript.exe //NoLogo """ & WScript.ScriptName & """ " & arglist WScript.Quit End If '= Running under CScript so OK to continue set oShell = Nothing '= Save references to stdout and stdin for use with Print, Read and Prompt set oOUT = WScript.StdOut set oIN = WScript.StdIn '= Print out the startup box StartBox BoxLine Wscript.ScriptName BoxLine "Started at " & Now() EndBox End Sub '= Utility methods for writing a box to the console with text in it Public Sub StartBox() Print " " & String(73, "_") Print " |" & Space(73) & "|" End Sub Public Sub BoxLine(sText) Print Left(" |" & Centre( sText, 74) , 75) & "|" End Sub Public Sub EndBox() Print " |" & String(73, "_") & "|" Print "" End Sub Public Sub Box(sMsg) StartBox BoxLine sMsg EndBox End Sub '= END OF Box utility methods '= Utility to center given text padded out to a certain width of text '= assuming font is monospaced Public Function Centre(sText, nWidth) dim iLen iLen = len(sText) '= Check for overflow if ilen > nwidth then Centre = sText : exit Function '= Calculate padding either side iLen = ( nWidth - iLen ) / 2 '= Generate text with padding Centre = left( space(iLen) & sText & space(ilen), nWidth ) End Function '= Method to write a line of text to the console Public Sub Print( sText ) oOUT.WriteLine sText End Sub '= Method to prompt user input from the console with a message Public Function Prompt( sText ) oOUT.Write sText Prompt = Read() End Function '= Method to read input from the console with no prompting Public Function Read() Read = oIN.ReadLine End Function '= Method to provide wait for n seconds Public Sub Wait(nSeconds) WScript.Sleep nSeconds * 1000 End Sub '= Method to pause for user to continue Public Sub Pause Prompt "Hit enter to continue..." End Sub END CLASS 

Create a .vbs with the following code, which will open your main .vbs:

Set objShell = WScript.CreateObject("WScript.shell") objShell.Run "cscript.exe ""C:\QuickTestb.vbs""" 

Here is my main .vbs

Option Explicit Dim i for i = 1 To 5 Wscript.Echo i Wscript.Sleep 5000 Next 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy