Tôi thích các công cụ WMIC
và TASKLIST
cô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 QPROCESS
windows. 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
QPROCESS
lệnh không quá mạnh TASKLIST
và 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 TASKLIST
khô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ố ( .exe
hậ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 QPROCESS
sử dụng là ý QPROCESS *
chí sẽ liệt kê tất cả các quy trình trong khi QPROCESS some.exe
sẽ chỉ lọc các quy trình cho người dùng hiện tại.
Sử dụng WMI
các đối tượng thông qua windows script exe thay vì WMIC
cũ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ì QPROCESS
trong 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 MSHTA
có 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();