Ich mag die WMIC
und TASKLIST
Tools, aber sie sind nicht in den Home / Basic-Editionen von QPROCESS
Windows verfügbar. Eine andere Möglichkeit besteht darin, Befehle zu verwenden, die auf fast jedem Windows-Computer verfügbar sind (für diejenigen, die Terminaldienste haben - ich denke, nur XP ohne SP2 zu gewinnen, also praktisch jeden Windows-Maschine):
@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
:: QPROCESS can display only the first 12 symbols of the running process
:: If other tool is used the line bellow could be deleted
set process_to_check=%process_to_check:~0,12%
QPROCESS * | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
QPROCESS
Der Befehl ist nicht so leistungsfähig wie TASKLIST
und zeigt nur 12 Symbole des Prozessnamens an. Er sollte jedoch berücksichtigt werden, wenn er TASKLIST
nicht verfügbar ist.
Einfachere Verwendung, wenn der Name verwendet wird, wenn der Prozess als Argument dient (das .exe
Suffix ist in diesem Fall obligatorisch, wenn Sie den Namen der ausführbaren Datei übergeben):
@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
:: .exe suffix is mandatory
set "process_to_check=%~1"
QPROCESS "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
Der Unterschied zwischen zwei QPROCESS
Verwendungsarten besteht darin, dass QPROCESS *
alle Prozesse aufgelistet QPROCESS some.exe
werden, während nur die Prozesse für den aktuellen Benutzer gefiltert werden.
Die Verwendung von WMI
Objekten über Windows Script Host Exe anstelle von WMIC
ist ebenfalls eine Option. Sie sollte auch auf jedem Windows-Computer ausgeführt werden (mit Ausnahme derjenigen, auf denen der WSH deaktiviert ist, dies ist jedoch ein seltener Fall). Hier ist eine Bat-Datei, in der alle Prozesse über WMI aufgelistet sind Klassen und kann anstelle des QPROCESS
obigen Skripts verwendet werden (es ist ein jscript / bat-Hybrid und sollte als gespeichert werden .bat
):
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
cscript //E:JScript //nologo "%~f0"
exit /b
************** end of JSCRIPT COMMENT **/
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
WScript.Echo( process.processID + " " + process.Name );
}
Und eine Änderung, die überprüft, ob ein Prozess ausgeführt wird:
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
cscript //E:JScript //nologo "%~f0" | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
exit /b
************** end of JSCRIPT COMMENT **/
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
WScript.Echo( process.processID + " " + process.Name );
}
Die beiden Optionen können auf Maschinen verwendet werden, die keine haben TASKLIST
.
Die ultimative Technik ist die Verwendung MSHTA
. Dies wird auf jedem Windows-Computer ab XP ausgeführt und hängt nicht von den Windows-Skript-Hosteinstellungen ab. Der Aufruf von MSHTA
könnte die Leistung jedoch ein wenig reduzieren (sollte wieder als Fledermaus gespeichert werden):
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
mshta "about:<script language='javascript' src='file://%~dpnxf0'></script>" | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
exit /b
************** end of JSCRIPT COMMENT **/
var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
fso.Write( process.processID + " " + process.Name + "\n");
}
close();