การเลือกงานที่จัดตารางเวลาของระบบ


10

กล่อง Windows 7 มีรายการงานที่กำหนดเวลาไว้ -> งาน Windows เริ่มต้น + งานที่กำหนดเองบางอย่างที่เริ่มต้นด้วยสตริงที่แน่นอน รหัสก่อนหน้าลบงานทั้งหมดด้วยคำสั่ง:

schtasks /Delete /TN * /F

แต่เราต้องการที่จะรักษางานของ Windows เริ่มต้นและการคัดเลือกลบงานที่เริ่มต้นด้วยการพูดสตริงบาง,abctask1 abctask2จะดำเนินการต่อไปได้อย่างไร ขอบคุณ!


คุณเคยลองใช้สิ่งที่ชอบschtasks /Delete /TN abctask* /Fหรือไม่?
โยนาห์บิชอป

1
ไม่ทำงาน ฉันคิดว่า * wildcard ไม่ทำงานอย่างที่คาดไว้

หากสัญลักษณ์ตัวแทนทำงานไม่ถูกต้องในลักษณะนั้นทางออกที่ดีที่สุดของคุณอาจเป็นรายการงานที่มี/queryตัวเลือกวนรอบพวกเขาค้นหาสิ่งที่ตรงกับรูปแบบที่คุณต้องการและฆ่าพวกเขาโดยใช้ชื่อเต็มของพวกเขา สิ่งที่ชอบสคริปต์ Perl อาจดีที่สุดสำหรับงานประเภทนี้
โยนาห์บิชอป

คำตอบ:


5

สมมติว่างานของคุณเป็นหนึ่งคำ (เช่น abctask1, abctask2 - ไม่ใช่ "abc task 1") สิ่งนี้น่าจะใช้ได้:

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

1
ฉันคิดว่าfindการมีขนาดน้อยกว่า 1/4 ของขนาดfindstrจะตอบสนองเร็วขึ้น นอกจากนี้ทั้งสองสนับสนุนการใช้เครื่องหมายคำพูดเพื่อล้อมรอบคำค้นหา ( findต้องใช้พวกเขา) การทำเช่นนั้นจะช่วยให้การค้นหางานเช่น "abc task 1" ที่คุณกล่าวถึง
James K

ขอบคุณ Mark จริง ๆ แล้วมันไม่ยอมรับ %% x ฉันเปลี่ยนเป็น% x และใช้งานได้! :) ไชโย! :)

@ user1620230 ฉันคิดว่าคุณกำลังใช้งานไฟล์แบตช์อยู่ double-percents ใน %% x จำเป็นต้องมีในแบตช์ไฟล์ในขณะที่% x จำเป็นต้องใช้ที่บรรทัดคำสั่ง @JamesK ฉันคิดว่าคุณคงรู้สึกกดดันมากที่จะพบความแตกต่างของความเร็วในโลกแห่งความเป็นจริงfindเทียบกับfindstrโดยเฉพาะอย่างยิ่งในสิ่งเล็ก ๆ นี้ :-)

อ้าเข้าใจแล้วใช่แล้วใช่แล้วในที่สุดมันก็อาจถูกใช้เป็นชุดสคริปต์ ขอบคุณสำหรับข้อมูล :)

schtasks / query ตัดชื่องานให้เหลือ 50 อักขระ ตัวเลือก / xml หลีกเลี่ยงการถูกตัดทอน for /f "tokens=2" %%x in ('schtasks /query /xml ^| findstr taskname') do
David

3

หากคุณต้องการใช้ไวด์การ์ด (*) ในการเลือกงานที่จะลบให้ลองใช้คำสั่งแบตช์ง่าย ๆ นี้:

(ตัวอย่างเท่านั้น)

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

2

ฉันสิ้นสุดที่นี่ในขณะที่กำลังมองหาวิธีที่จะปิดการใช้งานงานที่กำหนดเวลาไว้สำหรับ Windows โดยอัตโนมัติ ฉันไม่สามารถรับตัวอย่างใด ๆ ในปัจจุบันเพื่อจัดการชื่อภารกิจด้วยแบ็กสแลชและช่องว่างได้อย่างเหมาะสม ฉันพบว่าการใช้รูปแบบ csv และคำสั่ง find ทำงานได้ดีที่สุดสำหรับฉัน:

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

2

พวกคุณช่วยที่นี่มาไม่น้อย ในขณะที่การทำงานด้านบนใช้กับชื่อที่สั้นกว่าและ 'user3490' โพสต์ค่อนข้างดีในสตริง แต่ก็ดูเหมือนว่าจะไม่ทำงานกับชื่อที่มีช่องว่าง ฉันพบว่าใช้สัญลักษณ์แทนด้วย SCHTASKS ทำงานกับ '.' มากกว่า '*' และพบว่าการดัดแปลงที่น่าสนใจของสตริงช่วยให้โอกาสที่จำเป็นมาก! ฉันจะวางตัวอย่างด้านล่างของสิ่งที่ฉันใช้ในไฟล์แบทช์:

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"

ขอบคุณทุกคนที่นี่สำหรับตัวชี้ที่ยอดเยี่ยม! ฉันรู้ว่าหัวข้อนี้มีอายุเกินหนึ่งปี แต่ฉันหวังว่านี่จะช่วยคนอื่นที่อาจไม่ได้มาไกลขนาดนี้


1

คำตอบของ Mark ทำงานได้ดีตราบใดที่คุณมีชื่องานที่กำหนดเวลาไว้ค่อนข้างสั้น แต่เอาต์พุตเริ่มต้นของschtasks /query(รูปแบบตาราง) จะตัดชื่องานให้เหลือ 32 อักขระซึ่งทำให้เกิดข้อผิดพลาดเมื่อพยายามลบ

หากคุณต้องการจัดการกับงานที่มีชื่อยาวกว่าผมขอแนะนำให้ใช้รูปแบบผลลัพธ์ของรายการแทนซึ่งไม่ตัดทอน:

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

หากงานที่คุณต้องการลบมีคำนำหน้าทั่วไปคุณสามารถปรับแต่งการแข่งขันจาก findstr ต่อไป:

for /f "tokens=2 delims=\" %%x in ('schtasks /query /fo:list ^| findstr ^^abctask') do schtasks /Delete /TN %%x /F
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.