Tôi thích các công cụ WMICvà TASKLISTcông cụ nhưng chúng không có sẵn trong các phiên bản cơ bản / gia đình của QPROCESSwindows. Cách khác là sử dụng lệnh có sẵn trên hầu hết mọi máy Windows (đối với những máy có dịch vụ đầu cuối - tôi nghĩ chỉ thắng XP mà không có SP2, vì vậy thực tế là mọi máy tính cửa sổ):
@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
QPROCESSlệnh không quá mạnh TASKLISTvà bị giới hạn khi chỉ hiển thị 12 ký hiệu của tên tiến trình nhưng nên được xem xét nếu TASKLISTkhông có sẵn.
Cách sử dụng đơn giản hơn trong đó nó sử dụng tên nếu quy trình làm đối số ( .exehậu tố là bắt buộc trong trường hợp này khi bạn chuyển tên thực thi):
@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
Sự khác biệt giữa hai cách QPROCESSsử dụng là ý QPROCESS *chí sẽ liệt kê tất cả các quy trình trong khi QPROCESS some.exesẽ chỉ lọc các quy trình cho người dùng hiện tại.
Sử dụng WMIcác đối tượng thông qua windows script exe thay vì WMICcũng là một tùy chọn. Nó cũng nên chạy trên mọi máy windows (không bao gồm các đối tượng mà WSH bị tắt nhưng đây là trường hợp hiếm gặp). Đây là tệp bat liệt kê tất cả các quy trình thông qua WMI các lớp và có thể được sử dụng thay vì QPROCESStrong tập lệnh ở trên (nó là một jscript / bat hybrid và nên được lưu dưới dạng .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 );
}
Và một sửa đổi sẽ kiểm tra nếu một quá trình đang chạy:
@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 );
}
Hai tùy chọn có thể được sử dụng trên các máy không có TASKLIST.
Kỹ thuật cuối cùng là sử dụng MSHTA. Điều này sẽ chạy trên mọi máy Windows từ XP trở lên và không phụ thuộc vào cài đặt máy chủ tập lệnh windows. cuộc gọi của MSHTAcó thể làm giảm một chút hiệu suất mặc dù (một lần nữa nên được lưu dưới dạng bat):
@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();