特定のcmd.exeをバッチまたはvbsで殺すには?


0

私は3つのバッチファイルを持っています

open.bat

run.bat

process.bat

open.bat呼び出しrun.batrun.bat呼び出しprocess.bat.. 3つはすべて実行し続けます。cmd.exeを強制終了する方法があることはわかっています。しかし、私の問題は、batcgファイルを実行している特定のcmd.exeを強制終了する方法です

私の場合、私は閉じているopen.batときに殺す必要がありprocess.batます。私はこれに慣れていないので、できる限り詳細に案内してください。ありがとう。

cmd.exe / open.bat

cmd.exe / run.bat

cmd.exe / process.bat

それを殺すために特定のcmd.exeを言及する方法は?vbsまたはcmdを使用しますか?

事前に感謝します。


これはすでに起こります。前のバッチファイルから各バッチファイルをどのように開始しますか?通常、openは実行を待機し、runはプロセスが終了するのを待機します。プロセスが閉じると、制御は実行に戻り、実行を閉じると制御が開きに戻り、開いて閉じます。
-Appleoddity


callopen.batがprocess.batを呼び出すときに使用して各バッチファイルを開始します。open.batはrun.batのコマンドを実行するために実行し続けるので、私の場合は3つのファイルすべてを実行し続ける必要があります。しかし、ユーザーが閉じる/ kill process.batする場合、kill する必要がありopen.bat、run.batは実行し続ける必要があります。これに対する解決策は??
フィリップ

@DavidPostill、そのPIDはすべてバッチを実行しているすべてのユーザーPCで同じですか?PIDに言及することは自分のPCでのみ機能すると思います!! plsは明確に..
フィリップ

1
シェルスクリプトを実行するとデフォルトで新しいシェルプロセスが作成されるUnixとは異なり、Windowsでは、1つの CMD.EXEプロセス内でバッチファイルまたは複数のネストされたバッチファイルを呼び出します。「特定の」プロセスを取得するには、startCMDまたはCMDに関連付けられているファイル(通常は.batファイル)を個別に殺すstartことができます。また、新しいウィンドウのタイトルをフィルター可能な値に設定できます(/bスキップしない限り) 。
dave_thompson_085

回答:


0

vbscriptでは、次のようにできます。

Option Explicit
Dim Process2Check, Process2Kill
Process2Check = "D:\process.bat"
Process2Kill = "D:\open.bat"
If AppPrevInstance() Then   
    MsgBox "Instance already running",VbExclamation,"Instance already running"    
    WScript.Quit   
Else   
    Do   
        Call Main(Array(Process2Check))
        Call Pause(1) 
    Loop   
End If   
'**************************************************************************
Sub Main(colProcessPaths)   
    Dim ProcessPath   
    For Each ProcessPath In colProcessPaths     
        CheckProcess(ProcessPath)   
    Next   
End Sub   
'**************************************************************************
Sub CheckProcess(ProcessPath)   
    Dim ProcessName : ProcessName = StripProcPath(ProcessPath)   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE Commandline LIKE " &  CommandLineLike(ProcessName))   
            If .Count = 0 Then    
                Call Kill(Process2Kill)
            Else    
                Exit Sub    
            End if   
        End With   
    End With   
End Sub   
'**************************************************************************
Sub Kill(Process2kill)   
    Dim ProcessName : ProcessName = StripProcPath(Process2kill) 
    Dim Item,colItems  
    Set colItems = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")_   
        .ExecQuery("SELECT * FROM Win32_Process WHERE Commandline LIKE " &  CommandLineLike(ProcessName))  
        For each Item in colItems 
            If colItems.Count <> 0 Then    
                Item.TERMINATE
                WScript.Quit
            End if    
        Next     
End Sub   
'**************************************************************************
Function AppPrevInstance()   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
        " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
            AppPrevInstance = (.Count > 1)   
        End With   
    End With   
End Function   
'**************************************************************************
Sub Pause(Sec)    
    Wscript.Sleep(Sec*1000)    
End Sub   
'**************************************************************************
Function StripProcPath(ProcessPath)   
    Dim arrStr : arrStr = Split(ProcessPath, "\")   
    StripProcPath = arrStr(UBound(arrStr))   
End Function   
'**************************************************************************
Function CommandLineLike(ProcessPath)   
    ProcessPath = Replace(ProcessPath, "\", "\\")   
    CommandLineLike = "'%" & ProcessPath & "%'"   
End Function
'**************************************************************************
'Function to add doubles quotes into a variable
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'**************************************************************************
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.