Powershell เพื่อลบไฟล์ทั้งหมดที่มีนามสกุลไฟล์ที่แน่นอน


21

ฉันต้องการสแกนไดเรกทอรี (ไม่มีหมวดย่อย) และลบไฟล์ใด ๆ ที่มีส่วนขยายของ.avi ฉันลองใช้รูปแบบนี้ แต่ไม่มีข้อผิดพลาดเกิดขึ้นและไม่มีไฟล์ใดถูกลบ นี่คือรหัสที่ฉันพยายาม

get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}

สิ่งที่ควรแก้ไขเพื่อลบ.aviไฟล์ทั้งหมดจากโฟลเดอร์?


3
ป้องกันไม่ให้สิ่งที่คุณจากการใช้rm *.avi? (ใช่ว่าเป็นไวยากรณ์ PowerShell ถูกต้องเพราะrmเป็นนามแฝงของdel.
GiantTree

2
ในทางเทคนิคrmและdelเป็นนามแฝงทั้งสองของRemove-Itemcmdlet
รูต

คำตอบ:


15

ใช้del *.<extension>หรือเป็นชื่อแทนอย่างใดอย่างหนึ่ง (เช่นrmถ้าคุณคุ้นเคยกับการทุบตีมากกว่า)

ดังนั้นจะเป็นการdel *.aviลบไฟล์ทั้งหมดที่ลงท้ายด้วยใน.aviไดเรกทอรีทำงานปัจจุบัน

ใช้del <directory>\*.<extension>เพื่อลบไฟล์ในไดเรกทอรีอื่น


14
หากต้องการทำสิ่งนี้ซ้ำ ๆls *.avi -Recurse | foreach {rm $_}
Kolob Canyon

11

สมมติว่าวิธีที่ต้องการในการเปิดอินสแตนซ์ Powershell ในไดเรกทอรีรุ่นทั่วไปจะเป็นดังนี้:

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }

สำหรับรุ่นเฉพาะไดเรกทอรี:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly' *.avi | foreach { Remove-Item -Path $_.FullName }

เพิ่มใน-Recurseเพื่อGet-ChildItemมีผลกับโฟลเดอร์ที่มีทั้งหมด

ตัวอย่าง:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }

2

Remove-Itemcommandlet ควรจะเป็นสิ่งที่คุณต้องการ เพียงผ่านโฟลเดอร์รูทที่มีไฟล์ avi อยู่และส่งrecurseแฟล็กพร้อมกับตัวกรอง:

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -recurse -Include *.avi

สิ่งนี้จะทำงานได้เร็วกว่าการค้นหาไฟล์ผ่านGet-ChildItemและเรียกใช้ไฟล์Remove-Itemแต่ละไฟล์

การเพิ่ม-WhatIfสวิตช์จะพร้อมท์คุณก่อนที่จะลบแต่ละไฟล์ซึ่งปลอดภัยกว่าสำหรับผู้ที่ไม่คุ้นเคยกับ PowerShell


1
ไม่แน่ใจว่าทำไมคำตอบนี้จึงมีการลงคะแนน -WhatIfสวิทช์ที่ไม่จำเป็น ฉันส่งการแก้ไขไปยังคำตอบนี้ +1 Remove-ItemCommandlet คือสิ่งที่คุณต้องการและทำงานได้เร็วกว่าคำตอบที่ยอมรับในปัจจุบัน
เกร็ก Burghardt

ขอแนะนำให้ใช้-whatifเพื่อยืนยันว่าคุณจะลบเฉพาะไฟล์ที่คุณต้องการลบ และโดยเฉพาะอย่างยิ่งเมื่อเสนอคำสั่งการลบให้กับผู้ที่มีความเชี่ยวชาญด้านเทคนิคที่ไม่รู้จัก ดีที่สุดเพื่อให้ล้อการฝึกอบรมใน
Keith Miller

0

สมมติว่ามีไฟล์ข้อความหลายไฟล์ในไดเรกทอรีปัจจุบัน
dir * -include *.txtและdir *.txtทำงานตามที่คาดไว้ แต่dir -include *.txtให้อะไร เหตุผลที่จะอธิบายได้ดีบนกองมากเกิน

คำสั่งที่ถูกต้อง:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}


0

ในที่สุดมันก็ทำเพื่อฉัน - ลองทั้งหมดข้างต้นและ nada

get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force

แน่ใจว่าไม่จำเป็นต้องใช้สองแรง แต่นั่นคือสิ่งที่ใช้ได้ผลนั่นคือสิ่งที่ฉันกำลังดำเนินอยู่


0

ลองนี้

Remove-Item "c:\temp\*.txt" 

1
เฮ้ที่นี่ดูเหมือนจะไม่ลบไฟล์ avi และดูเหมือนว่าจะไม่ทำมันจากโฟลเดอร์ที่สงสัย คุณช่วยปรับปรุงคำตอบนี้หรืออธิบายว่ามันจะช่วยได้อย่างไรในสถานการณ์นี้
Sirex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.