vbscript输出到控制台
使用vbscript输出结果到控制台的命令或最快的方法是什么?
你意思是:
Wscript.Echo "Like this?"
如果在wscript.exe
(.vbs扩展名的默认处理程序,如果双击该脚本时会得到的)中运行该命令,则会在其中显示一个“MessageBox”对话框。 如果你在cscript.exe
下运行,你会在你的控制台窗口得到输出。
我知道这是前一阵子,但也许这会帮助别人。 它被发现在Dragon-IT Scripts和Code Repository上 。
你可以用下面的方法做这件事,远离cscript / wscript的差异,并允许你获得batch file所要的相同的控制台输出。 如果您从batch file中调用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)
我遇到这个post,回到我以前使用过的方法,就像@ MadAntrax的。
主要区别在于它使用VBScript用户定义的类来包装切换到CScript的所有逻辑并将文本输出到控制台,所以它使主脚本更清洁一些。
这假定您的目标是将输出stream传输到控制台,而不是输出到消息框。
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