मुझे उपकरण WMICऔर TASKLISTउपकरण पसंद हैं लेकिन वे QPROCESSविंडोज़ के बेसिक / बेसिक संस्करणों में उपलब्ध नहीं हैं। एक तरह से लगभग हर विंडोज़ मशीन पर उपलब्ध कमांड का उपयोग करना है (उन लोगों के लिए, जिनके पास टर्मिनल सेवाएं हैं - मुझे लगता है कि केवल XP को SP2 के बिना जीतना है, इसलिए प्रैक्टिकल हर विंडोज़ मशीन):
@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आदेश इतना शक्तिशाली नहीं है जितना TASKLISTकि प्रक्रिया के नाम के केवल 12 प्रतीकों को दिखाने में सीमित है, लेकिन अगर TASKLISTउपलब्ध नहीं है तो इसे ध्यान में रखा जाना चाहिए ।
अधिक सरल उपयोग जहां यह नाम का उपयोग करता है यदि एक तर्क के रूप में प्रक्रिया ( .exeप्रत्यय इस मामले में अनिवार्य है जहां आप निष्पादन योग्य नाम पास करते हैं):
@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
QPROCESSउपयोग के दो तरीकों के बीच का अंतर यह है कि QPROCESS *सभी प्रक्रियाओं को सूचीबद्ध QPROCESS some.exeकरेगा जबकि वर्तमान उपयोगकर्ता के लिए केवल प्रक्रियाओं को फ़िल्टर करेगा।
WMIइसके बजाय विंडोज स्क्रिप्ट होस्ट के माध्यम से वस्तुओं का उपयोग करना exe WMICभी एक विकल्प है। यह हर विंडोज़ मशीन पर भी चलना चाहिए (जहां WSH को बंद कर दिया गया है, लेकिन यह एक दुर्लभ मामला है) को छोड़कर। ऐसा कोई बैट फ़ाइल जो WMI के माध्यम से सभी प्रक्रियाओं को सूचीबद्ध करता है। कक्षाओं और इसके बाद के QPROCESSसंस्करण की स्क्रिप्ट में इस्तेमाल किया जा सकता है (यह एक jscript / बैट संकर है और इसे बचाया जाना चाहिए .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 );
}
और एक संशोधन जो जांच करेगा कि क्या कोई प्रक्रिया चल रही है:
@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 );
}
दो विकल्पों का उपयोग उन मशीनों पर किया जा सकता है जिनके पास नहीं है TASKLIST।
परम तकनीक का उपयोग कर रहा है MSHTA। यह XP और ऊपर से हर विंडोज़ मशीन पर चलेगा और विंडोज़ स्क्रिप्ट होस्ट सेटिंग्स पर निर्भर नहीं करेगा। की कॉल MSHTAहालांकि प्रदर्शन को थोड़ा कम कर सकती है (फिर से बल्ले के रूप में बचाया जाना चाहिए):
@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();