Saya suka alat WMICdan TASKLISTtetapi mereka tidak tersedia di rumah / edisi dasar QPROCESSwindows. 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
QPROCESSperintah tidak begitu kuat karena TASKLISTdan terbatas dalam menampilkan hanya 12 simbol nama proses tetapi harus dipertimbangkan jika TASKLISTtidak tersedia.
Penggunaan yang lebih sederhana di mana ia menggunakan nama jika proses sebagai argumen ( .exeakhiran 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 QPROCESSpenggunaan adalah bahwa QPROCESS *daftar keinginan semua proses sementara QPROCESS some.exehanya akan memfilter proses untuk pengguna saat ini.
Menggunakan WMIobjek melalui exe skrip host windows alih-alih WMICjuga 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 QPROCESSskrip 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 MSHTAdapat 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();