2012-03-15 10 views
5

के साथ प्रक्रियाओं को मार दें मैं कुछ निश्चित मानदंडों से मेल खाने वाली विंडोज प्रक्रियाओं को प्राप्त करने का प्रयास कर रहा हूं, उदा। वे "123456.exe" की तरह हैं और उन्हें कार्यसूची के साथ मारने की कोशिश कर रहे हैं। मुझे लगता है कि जैसे यह करने के लिए कोशिश कर रहा हूँ:कार्यसूची से पीआईडी ​​पास करें और कार्यसूची

FOR /F "usebackq tokens=2 skip=2" %i IN (`tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i 

जो सही नहीं है और मैं नहीं जानता कि क्यों .... किसी को भी मुझे एक संकेत दे सकते हैं? अग्रिम में Thanx!

उत्तर

11
FOR /F "usebackq tokens=2" %i IN (`tasklist ^| findstr /r /b "[0-9][0-9]*[.]exe"`) DO taskkill /pid %i 

कई परिवर्तन:

  • command_to_process आदेश के दोनों किनारों पर उद्धरण वापस की जरूरत है (``)।
  • कमांड_to_process के अंदर पाइप्स ("|") को एक कैरेट ("^") से बचने की आवश्यकता है।
  • आपका findstr कमांड उन सभी प्रक्रियाओं से मेल खाता है जिनके पास ".exe" से पहले एक अंक है। उदाहरण के लिए, "myapp4.exe" भी मारे गए होंगे। मैं जो संस्करण प्रदान करता हूं वह केवल प्रक्रियाओं के नामों से मेल खाता है।
  • "skip = 2" विकल्प findstr से पहले दो लाइन आउटपुट को छोड़ देगा, कार्यसूची नहीं। चूंकि नियमित अभिव्यक्ति कार्यसूची से आउटपुट की पहली दो पंक्तियों में कुछ भी मेल नहीं खाती है, इसलिए आप छोड़ विकल्प को हटाने के लिए सुरक्षित हैं।

वैसे, अगर आप एक बैच लिपि में इस आदेश जगह, "%% मैं" के बजाय "% मैं" की अपनी पैरामीटर के लिए उपयोग करने के लिए याद है, या आप i was unexpected at this time.

की तरह एक त्रुटि संदेश मिल जाएगा
+0

क्या आदेश में परिवर्तन होना था जिसके ऊपर मैं केवल प्रथम पीआईडी ​​को मारने के लिए चाहते हैं, तो सूची मैं? यानी अगर मेरे पास 2 notepad.exe खुला है, तो मैं सूची में केवल पहला पिड मारना चाहता हूं। – Jai

+0

कोई बात नहीं, मैंने गुप्त सॉस का पता लगाया। setlocal enableelayedexpansion सेट ध्वज = 0 फॉर/एफ "usebackq टोकन = 2" %% i IN ('tasklist^| findstr/r/b" notepad.exe "') DO ( अगर! ध्वज! == 0 ( गूंज! झंडा! \t taskkill/पीआईडी ​​%% मैं \t सेट ध्वज = 1 \t गूंज! झंडा! ) ) endlocal – Jai

1

प्रक्रियाओं नाम का अंतर बहुत जटिल जैसे नहीं है, तो नाम हमेशा एक ही है अगर आप taskkill की/FI विकल्प का उपयोग कर सकते हैं सीधे

taskkill /FI "IMAGENAME eq your_image_name_here.exe" 

==>taskkill documentation