9

現在、プロセスフローを制御するためにWindowsバッチ(DOS)コマンドファイルを使用しています。コンソールにメッセージを表示するには、ECHOコマンドを使用します。これらのメッセージは、以前はTivoliでしたが、現在はCA WA Workstation\ESPであるSchedulerソフトウェアに表示されます。

CMD \ BATファイルの代わりにVBSファイルを使い始めたいのですが、コンソールに対してECHOと同等の方法を見つけようとしています。

WScript.Echoコマンドを使用するか、Standard Outに書き込もうとすると、メッセージは両方のダイアログボックスに表示され、続行するには[OK]ボタンを押す必要があります。当然のことながら、スケジューラーを介して無人で実行すると、メッセージボックスをOKする人がいないため、ジョブはこれらのコマンドの1つにヒットし、ハングします。

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

WScript.echo("Test 2")

Scriptingオブジェクトを使用してログファイルにメッセージを書き込むことができることはわかっていますが、無効なパスが指定されている場合、または権限が不十分なために失敗する可能性があります。その上、スケジューラー内でフィードバック書き込みを見ることができることは非常に便利です。

VBScriptを使用してコンソールに書き込むにはどうすればよいですか?上記の理由で機能しなかった上記の方法がそれを行う方法であったことを示唆する他の投稿をここで見ました。

4

1 に答える 1

11

wscript.echoは正しいコマンドですが、ダイアログではなくコンソールに出力するには、wscriptではなくcscriptを使用してスクリプトを実行する必要があります。

あなたはこれを解決することができます

  • 次のようにコマンドラインからスクリプトを実行します。

    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
    
于 2012-11-02T19:07:48.853 に答える