输出到控制台

使用 vbscript 将结果输出到控制台的命令或最快方法是什么?

535627 次浏览

你的意思是:

Wscript.Echo "Like this?"

如果您在 wscript.exe下运行它(。Vbs 扩展,所以如果你双击脚本,你会得到什么) ,你会得到一个“ MessageBox”对话框,其中包含你的文本。如果您在 cscript.exe下运行它,您将在控制台窗口中获得输出。

这是在 < em > Dragon-IT Scripts and Code Repository 上找到的。

您可以使用以下代码来完成这项工作,避免使用 cscript/wscript 差异,并允许您获得与批处理文件相同的控制台输出。如果您从批处理文件调用 VBS 并需要使其看起来无缝,这可能会有所帮助。

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."

您只需要强制使用 cscript 而不是 wscript。我总是使用这个模板。函数 ForceConsole ()将把 vbs 执行到 cscript 中,而且您还有很好的别名来打印和扫描文本。

 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)

我偶然发现了这篇文章,然后回过头来看看我前段时间使用的一种方法,它与@MadAntrax 的方法很相似。

主要区别在于,它使用一个 VBScript 用户定义的类来包装切换到 CScript 并将文本输出到控制台的所有逻辑,因此它使主脚本更加简洁。

这假设您的目标是将输出流到控制台,而不是将输出转到消息框。

下面是 cCONSOLE 类。要使用它,请在脚本的末尾包含完整的类,然后在脚本的开头实例化它。这里有一个例子:

    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

下面是 cCONSOLE 类的代码

     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

有五种方法可以将文本输出到控制台:

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 将输出到控制台,但仅当脚本是使用 cscript.exe 启动的时候。如果使用 wscript.exe 启动,它将输出到消息框。

WScript.StdOut.Write 和 WScript.StdOut.WriteLine 将始终输出到控制台。

StdOut.写入和标准输出。WriteLine 也将始终输出到控制台。它需要额外的对象创建,但它比 WScript 快10% 左右。Echo.

使用以下代码创建一个.vbs,这将打开 main.vbs:

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

这是我的主要

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

可以在命令行中运行此脚本以执行 echo

set wshShell = createObject("wscript.shell")
wshShell.run"cmd.exe /c echo something",1

对于控制台输出,我使用了一个代码片段,如果在错误的运行时运行,它将优雅地退出。(打印的字体比打字的短...)

Sub print(s)
On Error Resume Next
WScript.stdout.WriteLine (s)
If  err= &h80070006& Then WScript.Echo " Please run this script with CScript": WScript.quit
End Sub
 

print "hello"