首页 文章

vbscript输出到控制台

提问于
浏览
144

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

5 回答

  • 5

    你的意思是:

    Wscript.Echo "Like this?"
    

    如果你在 wscript.exe (.vbs扩展名的默认处理程序)下运行它,那么'll get if you double-click the script) you'将获得带有文本的"MessageBox"对话框 . 如果你在 cscript.exe 下运行,你将在控制台窗口中输出 .

  • 51

    我知道这是不久前的,但也许这将有助于其他人 . 它发现于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."
    
  • 17

    你只需要强制使用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)
    
  • 1

    我遇到过这篇文章并回到了我前段时间使用过的方法,类似于@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
    
  • 267

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

    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"
    

    只有在使用cscript.exe启动脚本时,WScript.Echo才会输出到控制台 . 如果使用wscript.exe启动,它将输出到消息框 .

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

    StdOut.Write和StdOut.WriteLine也将始终输出到控制台 . 它需要额外的对象创建,但它比WScript.Echo快约10% .

相关问题