Em vbscript, você pode fazer assim:
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
'**************************************************************************