Chọn lọc xóa các tác vụ theo lịch trình của hệ thống


10

Hộp Windows 7 có một danh sách các tác vụ theo lịch trình -> Các tác vụ Windows mặc định + Các tác vụ tùy chỉnh nhất định bắt đầu bằng một chuỗi nhất định. Mã trước đã xóa tất cả các tác vụ bằng lệnh:

schtasks /Delete /TN * /F

Thay vào đó, chúng tôi muốn giữ lại các tác vụ Windows mặc định và xóa có chọn lọc các tác vụ bắt đầu bằng một chuỗi nhất định abctask1, abctask2. Làm thế nào để tiến hành hơn nữa? Cảm ơn!


Bạn đã thử sử dụng một cái gì đó như thế schtasks /Delete /TN abctask* /Fnào?
Jonah Giám mục

1
Không hoạt động. Tôi nghĩ rằng * ký tự đại diện không hoạt động như mong đợi.

Nếu ký tự đại diện không hoạt động đúng theo cách đó, cách tốt nhất của bạn có thể là lấy danh sách các tác vụ với /querytùy chọn, lặp qua chúng để tìm ra các nhiệm vụ phù hợp với mẫu bạn muốn và loại bỏ chúng bằng tên đầy đủ của chúng. Một cái gì đó giống như một kịch bản Perl có thể là tốt nhất cho loại nhiệm vụ này.
Jonah Giám mục

Câu trả lời:


5

Giả sử nhiệm vụ của bạn là một từ (ví dụ: abctask1, abctask2 - không phải "abc task 1"), điều này sẽ hoạt động:

for /f %%x in ('schtasks /query ^| findstr abctask') do schtasks /Delete /TN %%x /F

1
Tôi sẽ tưởng tượng rằng find, kích thước nhỏ hơn 1/4 findstrsẽ phản ứng nhanh hơn. Ngoài ra, cả hai đều hỗ trợ việc sử dụng dấu ngoặc kép để bao quanh cụm từ tìm kiếm ( findyêu cầu chúng), thực hiện điều đó sẽ cho phép tìm các tác vụ như "nhiệm vụ abc 1" mà bạn đã đề cập.
James K

Cảm ơn Mark, thực sự nó không chấp nhận %% x, tôi đã đổi nó thành% x và nó đã hoạt động! :) Chúc mừng! :)

@ user1620230 Tôi giả sử bạn đang chạy tệp này trong một tệp bó. Phần trăm kép trong %% x được yêu cầu trong một tệp bó, trong khi% x được yêu cầu tại dòng lệnh. @JamesK, tôi nghĩ rằng bạn sẽ rất khó khăn để tìm thấy bất kỳ sự khác biệt tốc độ trong thế giới thực findso với findstr, đặc biệt là trong một cái gì đó nhỏ này. :-)

Aha, có bạn :) Vâng vâng cuối cùng nó có thể được sử dụng trong một tập lệnh bó. Cảm ơn thông tin :)

scht nhiệm vụ / truy vấn cắt ngắn tên nhiệm vụ thành 50 ký tự. Tùy chọn / xml tránh cắt ngắn. for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David

3

Nếu bạn muốn ký tự đại diện (*) được sử dụng trong lựa chọn các tác vụ cần xóa, hãy thử sử dụng lệnh bó đơn giản này:

(Chỉ mẫu)

echo off
del %SystemDrive%\Windows\Tasks\Google*
del %SystemDrive%\Windows\Tasks\Facebook*

2

Tôi đã kết thúc ở đây trong khi tìm cách tự động hóa việc vô hiệu hóa một số tác vụ theo lịch trình của Windows. Tôi không thể lấy bất kỳ ví dụ hiện tại nào để xử lý đúng tên tác vụ với dấu gạch chéo ngược và dấu cách. Tôi thấy rằng sử dụng định dạng csv và lệnh find hoạt động tốt nhất với tôi:

for /f "tokens=1 delims=," %%x in ('schtasks /query /fo csv ^| find "\Microsoft\Windows\Application Experience\"') do schtasks /Delete /TN %%x /F

2

Các bạn đã giúp đỡ ở đây khá nhiều. Mặc dù các cách trên hoạt động cho các tên ngắn hơn và 'user3490' đã đăng một bổ sung khá hay cho chuỗi, nhưng dường như nó vẫn không hoạt động với các tên có khoảng trắng. Tôi thấy việc sử dụng các ký tự đại diện với SCHTASKS hoạt động với '.' thay vì '*' và tìm thấy một sửa đổi thú vị cho chuỗi cho phép nhiều cơ hội cần thiết! Tôi sẽ dán bên dưới các ví dụ về những gì tôi đã sử dụng trong một tệp bó:

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "AVGPCTuneUp_Task."') do SCHTASKS /DELETE /F /TN "\%%x"

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "AMD.Updater."') do SCHTASKS /DELETE /F /TN "\%%x"

for /f "tokens=2 delims=\" %%x in ('SCHTASKS /QUERY /FO:LIST ^| FINDSTR "Lenovo.Smile."') do SCHTASKS /DELETE /F /TN "\%%x"

Cảm ơn tất cả các bạn ở đây cho con trỏ tuyệt vời! Tôi biết chủ đề này đã hơn một năm tuổi, nhưng tôi hy vọng điều này sẽ giúp những người khác có thể chưa đi xa đến thế này.


1

Câu trả lời của Mark hoạt động tốt miễn là bạn có tên tác vụ theo lịch trình khá ngắn, nhưng đầu ra mặc định của schtasks /query(định dạng bảng) cắt ngắn tên tác vụ thành 32 ký tự, gây ra lỗi khi cố xóa chúng.

Nếu bạn cần xử lý các tác vụ có tên dài hơn, tôi khuyên bạn nên sử dụng định dạng đầu ra danh sách thay vào đó, không cắt ngắn:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr abctask') do schtasks /Delete /TN %%x /F

Nếu các tác vụ bạn muốn xóa có tiền tố chung, bạn có thể tinh chỉnh thêm kết quả khớp từ findstr:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.