2012-11-02 50 views
9

我們目前使用Windows批處理(DOS)命令文件來控制我們的流程。要向控制檯顯示消息,我們將使用ECHO命令。這些消息將顯示在我們的Scheduler軟件中,該軟件曾經是Tivoli,現在是CA WA Workstation \ ESP。什麼是使用VBScript批量ECHO命令的等價物?

我想開始使用VBS文件而不是CMD \ BAT文件,並試圖弄清楚如何在控制檯上執行相當於ECHO的操作。

當我嘗試使用WScript.Echo命令或寫入Standard Out時,消息顯示在兩個對話框中,它們需要按下OK按鈕才能繼續。毫不奇怪,當我通過調度程序運行無人值守時,作業碰到這些命令之一,並且掛起,因爲沒有人可以確定消息框。

SET FS = CreateObject("Scripting.FileSystemObject") 
SET StdOut = FS.GetStandardStream(1) 
StdOut.Write("Test 1") 

WScript.echo("Test 2") 

我知道我可以寫郵件使用腳本對象日誌文件,但如果提供,或者因爲權限不足的路徑無效,這可能會失敗。另外,能夠在調度程序中看到反饋寫入非常方便。

如何使用VBScript寫入控制檯?我在這裏看到了其他一些帖子,這些帖子暗示上述方法因爲上述原因而不起作用是實現它的方式。

+0

我會強烈建議切換到PowerShell的,而不是VBScript中。 –

回答

10

wscript.echo是正確的命令 - 但要輸出到控制檯而不是對話,您需要使用cscript而不是wscript運行腳本。

您可以通過

  • 從命令行運行腳本像這樣解決的:

    cscript myscript.vbs 
    
  • 更改默認的文件關聯(或創建這些腳本的一個新的文件擴展名和關聯你想用cscript運行)。

  • 變化通過腳本主機選項(即按http://support.microsoft.com/kb/245254)發動機

    cscript //h:cscript //s 
    
  • 或者,您可以添加幾行到腳本的開始,迫使它從WScript的切換「引擎」爲Cscript - 看http://www.robvanderwoude.com/vbstech_engine_force.php(下面複製):

    RunMeAsCScript 
    
    'do whatever you want; anything after the above line you can gaurentee you'll be in cscript 
    
    Sub RunMeAsCScript() 
         Dim strArgs, strCmd, strEngine, i, objDebug, wshShell 
         Set wshShell = CreateObject("WScript.Shell") 
         strEngine = UCase(Right(WScript.FullName, 12)) 
         If strEngine <> "\CSCRIPT.EXE" Then 
           ' Recreate the list of command line arguments 
           strArgs = "" 
           If WScript.Arguments.Count > 0 Then 
             For i = 0 To WScript.Arguments.Count 
               strArgs = strArgs & " " & QuoteIt(WScript.Arguments(i)) 
             Next 
           End If 
           ' Create the complete command line to rerun this script in CSCRIPT 
           strCmd = "CSCRIPT.EXE //NoLogo """ & WScript.ScriptFullName & """" & strArgs 
           ' Rerun the script in CSCRIPT 
           Set objDebug = wshShell.Exec(strCmd) 
           ' Wait until the script exits 
           Do While objDebug.Status = 0 
             WScript.Sleep 100 
           Loop 
           ' Exit with CSCRIPT's return code 
           WScript.Quit objDebug.ExitCode 
         End If 
    End Sub 
    
    'per Tomasz Gandor's comment, this will ensure parameters in quotes are covered: 
    function QuoteIt(strTemp) 
         if instr(strTemp," ") then 
           strTemp = """" & replace(strTemp,"""","""""") & """" 
         end if 
         QuoteIt = strTemp 
    end function 
    
+2

我偶然發現了同樣的問題,使用JS。檢查wscript/cscript會更優雅:if(!WScript.FullName.match(「cscript.exe」)){...}'。 (或者在正則表達式中添加'$',以防萬一)。我不重新運行腳本 - 只是根據所使用的引擎改變詳細程度。順便說一句,在上面的例子中:關於參數轉義/引用呢?它會與包含空格的參數一起工作嗎?啊哈! –

+0

好點 - 我剛剛複製並粘貼了引用網站的代碼 - 現在已經爲該場景打了一個快速修復(即添加QuoteIt功能)。太棒了JS前面的小費。謝謝@TomaszGandor。 – JohnLBevan

+1

@JohnLBevan -0.499用於QuoteIt函數的設計(使用全局WScript.Arguments(i)而不是傳遞參數strTemp)。 –

相關問題