यह कैसे जांचें कि क्या कोई प्रक्रिया बैच स्क्रिप्ट के माध्यम से चल रही है


260

यदि कोई एप्लिकेशन बैच (अच्छी तरह से cmd) फ़ाइल से चल रहा है तो मैं कैसे जांच सकता हूं?

यदि कोई प्रोग्राम पहले से चल रहा हो तो मुझे दूसरा उदाहरण लॉन्च करने की आवश्यकता नहीं है। (मैं केवल उदाहरण के लिए इसे बनाने के लिए ऐप नहीं बदल सकता।)

इसके अलावा आवेदन किसी भी उपयोगकर्ता के रूप में चल सकता है।



12
पांच साल बाद पूछे गए एक प्रश्न का डुप्लीकेट?
मैट लेसी

@ LưuV LnhPhúc वे अपेक्षाकृत करीब भी नहीं हैं।
कार्डिनल -

@JackKirby किसने कहा कि यह संबंधित नहीं है?
phuclv

जवाबों:


330

एक और संभावना है कि मैं grep के उपयोग से प्रेरित होकर आया हूं :

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Program is running

इसे एक अतिरिक्त फ़ाइल को सहेजने की आवश्यकता नहीं है, इसलिए मैं इस पद्धति को पसंद करता हूं।


7
यह मेरे लिए अच्छी तरह से काम किया (विंडोज़ XP SP3)। IMHO यह सब प्रस्तावित का सबसे सुंदर तरीका है, यहाँ केवल विंडोज़ के साथ भेजे गए औजारों का उपयोग करना है
hello_earth

2
मुझे इस कमांड लाइन के साथ सिंटैक्स समस्या थी। मैंने इसे tasklist /FI "IMAGENAME eq winword.exe" 2>NUL | find /I /N "winword.exe">NUL/ if %ERRORLEVEL%==1 goto wordnotrunningकाम करने के लिए इसे बदल दिया है (यदि कुछ हिस्सों के आसपास बोली पर संदेह है
स्टीव बी

4
कृपया याद रखें कि XP ​​के अन्य भाषा संस्करणों में फ़िल्टर नाम कोड में नहीं बल्कि मदद /?स्क्रीन में अनुवादित किए गए थे । उदाहरण के लिए IMAGENAMEपॉलिश संस्करण में है NAZWA_OBRAZU
rsk82

3
Win7 के तहत मुझे इसे बदलना पड़ा tasklist /FI "IMAGENAME eq myapp.exe" /NH | find /I /N "myapp.exe" >NUL पहला NUL अनावश्यक लगता है, मुझे नहीं पता कि '2' क्या है, / NH वैकल्पिक है।
जनवरी डॉगजेन

12
टास्कलिस्ट हमेशा स्थिति 0 से बाहर निकलता है चाहे वह किसी भी मिलान कार्यों को पाता हो या नहीं, यही वजह है कि यह अपने आप बेकार है। चूँकि आपको किसी भी तरह से इसके आउटपुट की जाँच करने के लिए find (या findstr) का उपयोग करना है, टास्कलिस्ट के फिल्टर का उपयोग करने का कोई मतलब नहीं है। बस करो टास्कलिस्ट | "myprog.exe"> nul: && गोटो फाउंडिट या सोमेसुच खोजें। आपको टास्कलिस्ट के लिए / v (वर्बोज़) विकल्प की आवश्यकता हो सकती है।
डेनिस होवे

61

यहां बताया गया है कि मैंने इसे कैसे काम किया है:

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log

यदि यह पहले से नहीं चल रहा है तो उपरोक्त नोटपैड खोलेगा ।

संपादित करें: ध्यान दें कि यह टास्कलिस्ट से छिपे हुए एप्लिकेशन को नहीं ढूंढेगा। इसमें एक अलग उपयोगकर्ता के रूप में चलने वाले कोई भी अनुसूचित कार्य शामिल होंगे, क्योंकि ये स्वचालित रूप से छिपे हुए हैं।


2
कार्यसूची प्रारूप को CSV या किसी भी चीज़ में बदलना लेकिन तालिका महत्वपूर्ण है क्योंकि यह कार्यसूची डिफ़ॉल्ट लेआउट (तालिका) लंबी छवि के नामों को काटती है जो तर्क को तोड़ती है।
स्कॉट व्हाइट

4
यह समाधान विस्टा पर काम नहीं करेगा क्योंकि TASKLIST कुछ आउटपुट उत्पन्न करता है भले ही प्रक्रिया नहीं मिली हो। मुझे लगता है वही विंडोज 7 के लिए सच है
debham

विंडोज 10 में काम नहीं करता है। search.log में "INFO: कोई कार्य नहीं चल रहे हैं जो निर्दिष्ट मानदंडों से मेल खाते हैं।" और नो नोटपैड शुरू किया गया है
सर्गेई

46

मुझे Chaosmaster का समाधान पसंद है! लेकिन मैंने एक ऐसे समाधान की तलाश की जो किसी अन्य बाहरी कार्यक्रम (जैसे find.exe या findstr.exe ) को शुरू न करे । इसलिए मैंने मैट लेसी के समाधान से विचार जोड़ा, जो एक टालने योग्य अस्थायी फ़ाइल भी बनाता है। अंत में मुझे काफी सरल समाधान मिल सकता है, इसलिए मैं इसे साझा करता हूं ...

SETLOCAL EnableExtensions
set EXE=myprog.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
echo Not running
goto FIN
:FOUND
echo Running
:FIN

यह मेरे लिए अच्छी तरह से काम कर रहा है ...


यह समाधान अच्छी तरह से काम करता है - विंडोज 8.1 में परीक्षण किया गया। मैंने नोटिस किया कि यह केस-संवेदी है।
जैतून-क्लेर

@ LordScree जैसा कि मैं संयुक्त राष्ट्र के * x सिस्टम केस संवेदनशीलता पर काम करता हूं मेरे लिए अच्छा है! मैं भी केस संवेदनशील फ़ाइल नामों को सक्षम करने के लिए फ़ाइल सिस्टम सेट करता हूं। ;)
ट्रू डे

मेरे लिए अच्छी तरह से काम करता है - खिड़कियों में परीक्षण किया 7 X64
श्री Rubix

यह काम नहीं करता है यदि एप्लिकेशन के नाम में एक स्थान है क्योंकि% x पहले स्थान तक एप्लिकेशन नाम का हिस्सा है।
क्रिस

यदि% x == INFO: की जाँच करके यह पता लगाया जाए कि एप्लिकेशन के बजाय एप्लिकेशन नहीं मिला है, तो एक संभावित समाधान यह होगा: लेकिन मुझे नहीं पता कि यह विंडोज के किन संस्करणों पर काम करेगा या यदि कोई बेहतर समाधान है।
क्रिस

21

TpKLIST के बजाय QPROCESS का उपयोग करने के लिए npocmaka का सुझाव बहुत अच्छा है लेकिन, इसका उत्तर इतना बड़ा और जटिल है कि मैं इसके बारे में काफी सरलीकृत संस्करण पोस्ट करने के लिए बाध्य महसूस करता हूं, जो मुझे लगता है, सबसे गैर-उन्नत उपयोगकर्ताओं की समस्या को हल करेगा:

QPROCESS "myprocess.exe">NUL
IF %ERRORLEVEL% EQU 0 ECHO "Process running"

ऊपर दिए गए कोड को विंडोज 7 में परीक्षण किया गया था, जिसमें व्यवस्थापक कठोरता वाले उपयोगकर्ता थे।


मैंने इस विचार का उपयोग दो बार स्वचालित प्रक्रिया को रोकने के लिए किया और यह एक आकर्षण की तरह काम करता है!
डेवी सी

मुझे कहना होगा कि इस कमांड के विपरीत, टास्कलिस्ट सॉल्यूशंस न केवल इतनी सरल क्वेरी के लिए बहुत जटिल लगते हैं, बल्कि वे एक या दूसरे भाग को चलाते हैं और कई टन सीपीयू का उपयोग करते हैं! यह बहुत बेहतर है, बिना व्यवस्थापक अनुमतियों के भी काम किया (विंडोज सर्वर 2012)।
यूजीन मारिन

यह सबसे सरल और सबसे अच्छा समाधान (कम से कम मेरे लिए) लगता है क्योंकि यह तब काम करता है जब-जब एप्लिकेशन के नाम में स्थान होता है। मैं उत्सुक हूं कि इस समाधान की सीमाएं क्या हैं और इसमें अधिक वोट क्यों नहीं हैं।
क्रिस

20

विंडोज के तहत आप यह सुनिश्चित करने के लिए विंडोज मैनेजमेंट इंस्ट्रूमेंटेशन (WMI) का उपयोग कर सकते हैं कि निर्दिष्ट कमांड लाइन वाला कोई ऐप लॉन्च नहीं किया गया है, उदाहरण के लिए:

wmic process where (name="nmake.exe") get commandline | findstr /i /c:"/f load.mak" /c:"/f build.mak" > NUL && (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% & exit /b 1)


ध्यान दें कि WMIC को प्रशासनिक विशेषाधिकारों की आवश्यकता होती है; यदि आपके पास यह नहीं है, तो Only the administrator group members can use WMIC.EXE.इसके बादReason:Win32 Error: Access is denied.
Jeroen Wiert Pluimers

मुझे लगता है कि यह सबसे अच्छा समाधान है, क्योंकि विकी आपको एक पूरी कमांड लाइन लॉन्च की गई है और मिलियन अन्य informations देता है ...
Glavić


8

मैं http://www.teamcti.com/pview/prcview.htm से PV.exe का उपयोग प्रोग्राम फाइल्स \ PV में एक बैच फ़ाइल के साथ करता हूं :

@echo off
PATH=%PATH%;%PROGRAMFILES%\PV;%PROGRAMFILES%\YourProgram
PV.EXE YourProgram.exe >nul
if ERRORLEVEL 1 goto Process_NotFound
:Process_Found
echo YourProgram is running
goto END
:Process_NotFound
echo YourProgram is not running
YourProgram.exe
goto END
:END

1
यह मेरे लिए विंडोज 7 पर काम करता है। 2 डी लाइन निर्देशिका है जिसमें प्रोग्राम होता है, न कि प्रोग्राम ही।
फैबियो कोइनीनी

8

ट्रू का जवाब सबसे सुरुचिपूर्ण समाधान लग रहा था, हालांकि, मुझे कुछ गड़बड़ करना पड़ा क्योंकि मुझे समझ नहीं आया कि वास्तव में क्या चल रहा था। मुझे उम्मीद है कि अगले व्यक्ति के लिए कुछ समय बचाने के लिए चीजें साफ करें।

TrueY का संशोधित उत्तर:

::Change the name of notepad.exe to the process .exe that you're trying to track
::Process names are CASE SENSITIVE, so notepad.exe works but Notepad.exe does NOT
::Do not change IMAGENAME
::You can Copy and Paste this into an empty batch file and change the name of
::notepad.exe to the process you'd like to track
::Also, some large programs take a while to no longer show as not running, so
::give this batch a few seconds timer to avoid a false result!!

@echo off
SETLOCAL EnableExtensions

set EXE=notepad.exe

FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound

goto ProcessNotFound

:ProcessFound

echo %EXE% is running
goto END
:ProcessNotFound
echo %EXE% is not running
goto END
:END
echo Finished!

वैसे भी, मुझे उम्मीद है कि मदद करता है। मुझे पता है कि कभी-कभी बैच / कमांड-लाइन पढ़ना मेरे जैसे एक नौसिखिया की तरह भ्रमित करने वाला हो सकता है।


6

मैट लेसी द्वारा प्रदान की जवाब Windows XP के लिए काम करता है। हालाँकि, Windows Server 2003 में लाइन

 tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

रिटर्न

जानकारी: कोई कार्य नहीं चल रहे हैं जो निर्दिष्ट मानदंडों से मेल खाते हैं।

जो तब पढ़ा जाता है जब प्रक्रिया चल रही हो।

मेरे पास बैच स्क्रिप्टिंग अनुभव का एक ढेर नहीं है, इसलिए मेरी आत्मा को search.logफ़ाइल में प्रक्रिया के नाम की खोज करना है और परिणामों को किसी अन्य फ़ाइल में पंप करना है और किसी भी आउटपुट के लिए खोज करना है।

tasklist /FI "IMAGENAME eq notepad.exe" /FO CSV > search.log

FINDSTR notepad.exe search.log > found.log

FOR /F %%A IN (found.log) DO IF %%~zA EQU 0 GOTO end

start notepad.exe

:end

del search.log
del found.log

मैं उम्मीद करता हूं कि इससे किसी की मदद होगी।


यह Win 2008 के लिए काम करता है। +1 बिना किसी कार्य के चल रहा है जो निर्दिष्ट मानदंडों से मेल खाता है।
मंगेश पिंपलकर

5

मुझे उपकरण 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();

2

मुझे नहीं पता कि सीएमडी में निर्माण कैसे किया जाता है लेकिन अगर आपके पास जीआरपी है तो आप निम्नलिखित प्रयास कर सकते हैं:

tasklist /FI "IMAGENAME eq myApp.exe" | grep myApp.exe
if ERRORLEVEL 1 echo "myApp is not running"

2

बस उल्लेख करते हुए, यदि आपका कार्य नाम वास्तव में लंबा है tasklist, तो यह परिणाम में इसकी संपूर्णता में प्रकट नहीं होगा , इसलिए इसके विपरीत जांच करने के लिए यह (स्थानीयकरण के अलावा) सुरक्षित हो सकता है।

इस उत्तर का रूपांतर :

:: in case your task name is really long, check for the 'opposite' and find  the message when it's not there
tasklist /fi "imagename eq yourreallylongtasknamethatwontfitinthelist.exe" 2>NUL | find /I /N "no tasks are running">NUL
if "%errorlevel%"=="0" (
    echo Task Found
) else (
    echo Not Found Task
)

0

मैं यहां खिड़कियां मान रहा हूं। तो, आपको उस जानकारी को प्राप्त करने के लिए WMI का उपयोग करना होगा। स्क्रिप्ट से WMI का उपयोग कैसे करें, इस पर बहुत सारे उदाहरणों के लिए स्क्रिप्टिंग गाइ के अभिलेखागार देखें


0

मैंने मैट (2008-10-02) द्वारा प्रदान की गई स्क्रिप्ट का उपयोग किया । केवल एक चीज जो मुझे परेशान कर रही थी, वह यह थी कि यह search.logफाइल डिलीट नहीं करेगी । मुझे उम्मीद है क्योंकि मुझे cdअपना कार्यक्रम शुरू करने के लिए दूसरे स्थान पर जाना होगा। मैं cdBAT फ़ाइल पर वापस आ गया हूँ और search.logहैं, लेकिन यह अभी भी नहीं हटेगी। इसलिए मैंने संकल्प किया कि search.logआखिरी के बजाय पहले फ़ाइल को हटाकर ।

del search.log

tasklist /FI "IMAGENAME eq myprog.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%-zA EQU 0 GOTO end

cd "C:\Program Files\MyLoc\bin"

myprog.exe myuser mypwd

:end

1
@ सेबेस्टियन: यहां थोड़ी अतिरिक्त जानकारी जोड़ी गई है, इसलिए मैं इसे एक उत्तर के रूप में छोड़ने के लिए इच्छुक हूं।
छिपकली का बिल

0

आपको मूल प्रक्रिया नाम की जांच करनी चाहिए, एक .NET आधारित समाधान ** के बारे में कोड प्रोजेक्ट लेख देखें ।

जाँच करने का एक गैर-प्रोग्रामेटिक तरीका:

  1. Cmd.exe लॉन्च करें
  2. एक एप्लिकेशन लॉन्च करें (उदाहरण के लिए c:\windows\notepad.exe)
  3. Process Explorer में Notepad.exe प्रक्रिया के गुणों की जाँच करें
  4. मूल प्रक्रिया के लिए जाँच करें (यह cmd.exe दिखाता है)

मूल प्रक्रिया नाम प्राप्त करके उसी की जाँच की जा सकती है।


0

Vtrz के उत्तर और किसी अन्य विषय पर सैमुअल रेनर्ट के उत्तर पर बिल्डिंग , मैं निम्नलिखित स्क्रिप्ट के साथ आया था जो केवल तभी चलती है %EXEC_CMD%जब वह पहले से ही नहीं चल रही हो:

@echo off
set EXEC_CMD="rsync.exe"
wmic process where (name=%EXEC_CMD%) get commandline | findstr /i %EXEC_CMD%> NUL
if errorlevel 1 (
    %EXEC_CMD% ...
) else (
    @echo not starting %EXEC_CMD%: already running.
)

जैसा कि पहले कहा गया था, इसके लिए प्रशासनिक विशेषाधिकारों की आवश्यकता है।


मेरे लिए काम नहीं किया, और मैं एक व्यवस्थापक खाते का उपयोग कर रहा हूँ। एक डॉस बॉक्स के साथ दिखाई देता हैNode - (computer name) ERROR: Description = Invalid query
कावेरीम

1
मेरे लिए बस ठीक काम करता है।
मार्क डंकन

1
यहाँ विंडोज 7 के लिए बढ़िया काम करता है। कोई बात नहीं।
गांगेयनिंज

0

मुझे एक रिट्री के साथ एक समाधान की आवश्यकता थी। यह कोड तब तक चलेगा जब तक प्रक्रिया नहीं मिलती है और फिर इसे मार दें। आप चाहें तो टाइमआउट या कुछ भी सेट कर सकते हैं।

टिप्पणियाँ:

  • ".Exe" अनिवार्य है
  • आप मापदंडों के साथ एक फ़ाइल को चलाने योग्य बना सकते हैं, नीचे संस्करण
    :: Set programm you want to kill
    :: Fileextension is mandatory
    SET KillProg=explorer.exe

    :: Set waiting time between 2 requests in seconds
    SET /A "_wait=3"

    :ProcessNotFound
        tasklist /NH /FI "IMAGENAME eq %KillProg%" | FIND /I "%KillProg%"
        IF "%ERRORLEVEL%"=="0" (
            TASKKILL.EXE /F /T /IM %KillProg%
        ) ELSE (
            timeout /t %_wait%
            GOTO :ProcessNotFound
        )

taskkill.bat:

    :: Get program name from argumentlist
    IF NOT "%~1"=="" (
        SET "KillProg=%~1"
    ) ELSE (
        ECHO Usage: "%~nx0" ProgramToKill.exe & EXIT /B
    )

    :: Set waiting time between 2 requests in seconds
    SET /A "_wait=3"

    :ProcessNotFound
        tasklist /NH /FI "IMAGENAME eq %KillProg%" | FIND /I "%KillProg%"
        IF "%ERRORLEVEL%"=="0" (
            TASKKILL.EXE /F /T /IM %KillProg%
        ) ELSE (
            timeout /t %_wait%
            GOTO :ProcessNotFound
        )

साथ दौड़ो .\taskkill.bat ProgramToKill.exe


-2

मैं आमतौर पर cmd प्रॉम्प्ट में कमांड का पालन करता हूं यह जांचने के लिए कि मेरा program.exe चल रहा है या नहीं:

tasklist | grep program
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.