ディレクトリで実行するスクリプトがいくつかあります。それらはすべて同時に実行されます。どのスクリプトが最後に終了したかを判断するのに苦労しています。これを見つける方法はありますか?
質問する
77 次
3 に答える
2
基本的なロギングはジョブを実行し、スクリプトの開始時と終了時にログ エントリを書き込みます。また、期間を記録することもできます。結果をログファイルに書き込むことができます。結果は秒単位です。
startTime=timer
wscript.echo "started at " & startTime
'do your stuff'
wScript.sleep 500
stopTime=timer
wscript.echo "stopped at " & StopTime & " duration was " & stopTime - startTime
'started at 81558,17
'stopped at 81558,67 duration was 0,5
于 2013-02-28T21:40:10.807 に答える
2
マスター スクリプトを使用して、.Exec 経由で (子) スクリプトを開始します。exec オブジェクトのステータス プロパティを監視します。exec オブジェクトのステータスが WshFinished に変わった時刻を記録/表示します。
于 2013-02-28T17:52:46.170 に答える
1
私の提案は WMI に基づいています。(斬新なアイデアについては下にスクロールしてください)
Option Explicit
Dim objWMIService, colProcesses, objProcess
Dim iCount, iLoop, sFileName
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& ".\root\cimv2")
' wait all scripts to finish
Do While True
WScript.Sleep 200
' snapshot running scripts
Set colProcesses = objWMIService.ExecQuery( _
"Select * From Win32_Process " _
& "Where Name = 'WScript.exe' " _
& "OR Name = 'CScript.exe'", , 48)
iCount = 0
For Each objProcess In colProcesses
' skip current "monitor" script, test the rest
If InStr (objProcess.CommandLine, WScript.ScriptName) = 0 Then
sFileName = Split(objProcess.CommandLine, """")(3)
iCount = iCount + 1
End If
Next
If iCount < 1 Then Exit Do
iLoop = iLoop + 1
Loop
' and show what we get
If iLoop > 0 Then
WScript.Echo "LastOne:" & vbNewLine & sFileName
Else
WScript.Echo "No other .vbs running except Me"
End If
[編集] ええと、新しいアイデアが今私の頭に浮かんでいます。たぶん、あなたはそれが面白いと思うか、少なくとも試してみてください.
' do your work here...
WScript.Sleep 3000
Call SelfLogged
Sub SelfLogged()
Const ForAppending = 8
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(WScript.ScriptFullName, ForAppending)
.Write Chr(0)
End With
End With
End Sub
アイデアはDateLastModified
、ファイルに char を追加してファイル プロパティを変更することです。
于 2013-02-28T21:14:33.400 に答える