Saya suka alat WMIC
dan TASKLIST
tetapi mereka tidak tersedia di rumah / edisi dasar QPROCESS
windows. Cara lain adalah dengan menggunakan perintah yang tersedia di hampir setiap mesin windows (untuk orang-orang yang memiliki layanan terminal - saya pikir hanya memenangkan XP tanpa SP2, jadi praktis setiap mesin windows):
@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
perintah tidak begitu kuat karena TASKLIST
dan terbatas dalam menampilkan hanya 12 simbol nama proses tetapi harus dipertimbangkan jika TASKLIST
tidak tersedia.
Penggunaan yang lebih sederhana di mana ia menggunakan nama jika proses sebagai argumen ( .exe
akhiran adalah wajib dalam kasus ini di mana Anda memberikan nama yang dapat dieksekusi):
@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
Perbedaan antara dua cara QPROCESS
penggunaan adalah bahwa QPROCESS *
daftar keinginan semua proses sementara QPROCESS some.exe
hanya akan memfilter proses untuk pengguna saat ini.
Menggunakan WMI
objek melalui exe skrip host windows alih-alih WMIC
juga merupakan pilihan. Ini harus dijalankan juga pada setiap mesin windows (tidak termasuk yang mana WSH dimatikan tetapi ini adalah kasus yang jarang terjadi). Berikut file bat yang berisi daftar semua proses melalui WMI kelas dan dapat digunakan sebagai pengganti QPROCESS
skrip di atas (ini adalah jscript / bat hybrid dan harus disimpan sebagai .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 );
}
Dan modifikasi yang akan memeriksa apakah suatu proses sedang berjalan:
@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 );
}
Dua opsi dapat digunakan pada mesin yang tidak memiliki TASKLIST
.
Teknik utamanya adalah menggunakan MSHTA
. Ini akan berjalan di setiap mesin windows dari XP dan di atasnya dan tidak tergantung pada pengaturan host skrip windows. panggilan MSHTA
dapat sedikit mengurangi kinerja (sekali lagi harus disimpan sebagai kelelawar):
@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();