2012-03-15 28 views
5

Tôi đang cố gắng để có được các quy trình cửa sổ phù hợp với một số tiêu chí nhất định, ví dụ: chúng giống như "123456.exe" và cố gắng giết chúng bằng tasklist. Tôi đang cố gắng thực hiện điều đó như sau:Vượt qua các PID từ danh sách tác vụ và xóa các quy trình với danh sách tác vụ

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

điều này không đúng và tôi không biết tại sao .... Bất kỳ ai cũng có thể gợi ý cho tôi không? Thanx trước!

Trả lời

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

Một số thay đổi:

  • Các command_to_process cần lại dấu ngoặc kép (``) trên cả hai mặt của lệnh.
  • Đường ống ("|") bên trong lệnh command_to_process cần phải được thoát bằng dấu mũ ("^").
  • Lệnh tìm kiếm của bạn sẽ khớp với tất cả các quy trình có chữ số trước ".exe". Ví dụ: "myapp4.exe" cũng sẽ bị giết. Phiên bản tôi cung cấp sẽ khớp với tên quy trình chỉ chứa số.
  • Tùy chọn "bỏ qua = 2" sẽ bỏ qua đầu ra hai dòng đầu tiên từ findstr, chứ không phải danh sách tác vụ. Vì cụm từ thông dụng sẽ không khớp với bất kỳ thứ gì trong hai dòng đầu tiên của danh sách tác vụ, bạn sẽ an toàn để xóa tùy chọn bỏ qua.

Bằng cách này, nếu bạn đặt lệnh này trong một kịch bản hàng loạt, hãy nhớ sử dụng "%% i" thay vì "% i" cho thông số của bạn, hoặc bạn sẽ nhận được một thông báo lỗi như i was unexpected at this time.

+0

Điều gì sẽ là sự thay đổi trong lệnh trên nếu tôi muốn giết chỉ pid đầu tiên trong danh sách? tức là nếu tôi mở 2 notepad.exe, tôi muốn chỉ xóa pid đầu tiên trong danh sách. – Jai

+0

Đừng bận tâm, tôi đã tìm ra nước sốt bí mật. setlocal enabledelayedexpansion đặt cờ = 0 FOR/F "usebackq tokens = 2" %% i IN ('tasklist^| findstr/r/b" notepad.exe "') DO ( if! flag! == 0 ( vang! cờ! \t taskkill/pid %% i \t bộ cờ = 1 \t vang cờ! ) ) endlocal – Jai

1

Nếu sự khác biệt quá trình tên không phải là rất phức tạp, ví dụ như nếu tên luôn là như nhau bạn có thể sử dụng tùy chọn/FI của taskkill trực tiếp

taskkill /FI "IMAGENAME eq your_image_name_here.exe" 

==>taskkill documentation

Các vấn đề liên quan