ลบไฟล์ทั้งหมดออกจากโฟลเดอร์และโฟลเดอร์ย่อย


52

ฉันต้องการลบไฟล์ทั้งหมดออกจากโครงสร้างโฟลเดอร์ดังนั้นฉันจึงเหลือโครงสร้างโฟลเดอร์เปล่า

สามารถทำได้ในชุดหรือสคริปต์VBScript ?

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

คุณแนะนำอะไรได้บ้าง


คุณหมายถึงการลบแบบเรียกซ้ำ? สามารถทำได้อย่างแน่นอน สิ่งที่ต้องการrd /s /q "c:\folder aจะทำการลบซ้ำในไฟล์และโฟลเดอร์ทั้งหมดภายในFolder A
Ramhound

ฉันสามารถทำได้ฉันไม่รู้วิธีเขียนสคริปต์ใน PowerShell แต่มีสคริปต์ PowerShell ที่เรียกใช้ก่อนหน้า
BobJim

2
ตอนนี้เป็นเวลาที่เหมาะสำหรับการเรียนรู้ฉันจะวิจัยชุดและไวยากรณ์ vbs เพื่อวัตถุประสงค์ดั้งเดิม แต่ลงทุนเวลาในการเรียนรู้ PS มากขึ้น
MDMoore313

ฉันยังไม่ได้มีโอกาสตรวจสอบรหัสถึงแม้ว่าฉันจะแน่ใจว่ามันจะทำงาน ฉันจะกลับมาและเลือกคำตอบที่เหมาะสมที่สุดสำหรับคำค้นหาเริ่มต้นของฉัน
BobJim

ฉันจะแนะนำ @ BigHomie เป็นครั้งที่สอง - ฉันเพิ่งเรียนรู้ PowerShell และฉันต้องบอกว่ามันค่อนข้างเรียบร้อย - ไม่ยากเกินไปเป็นอาวุธที่ดีในคลังแสงของผู้เข้ารหัส ฉันใช้มันค่อนข้างบ่อยตอนนี้
เบ็น

คำตอบ:


75

สามารถทำได้โดยใช้PowerShell :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

คำสั่งนี้รับรายการย่อยแต่ละรายการ$pathเรียกใช้งานวิธีลบในแต่ละรายการและค่อนข้างเร็ว โครงสร้างโฟลเดอร์นั้นยังคงอยู่

หากคุณมีไฟล์ที่ไม่มีนามสกุลให้ใช้

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

แทน.

ดูเหมือนว่า-Fileพารามิเตอร์อาจถูกเพิ่มหลังจาก PowerShell v2 ถ้าเป็นเช่นนั้น

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

ควรทำเคล็ดลับสำหรับไฟล์ที่มีนามสกุล

หากไม่ได้ผลให้ตรวจสอบว่าคุณมี Powershell รุ่นล่าสุดหรือไม่


1
มัน-Include *.*ไม่ได้-Include .แตกต่างกันใหญ่! :-)
MDMoore313

Get-ChildItem -Path D: \ EmptyThisFolder -Include -File -Recurse | foreach {$ _. ลบ ()}
BobJim

ทำไมคุณกำลังใช้-Include .?? นั่นคือปัญหาที่เกิดขึ้น
MDMoore313

2
พวกเขาใช้powershell --versionไม่ได้เหรอ พวกเขาไม่สามารถใช้หมายเลขเวอร์ชันที่มีตัวเลขเป็นบวกได้หรือไม่ มันบ้าไปแล้ว มีผู้โหวตเกิน 1300 คนสำหรับคำถามเกี่ยวกับวิธีค้นหาหมายเลขเวอร์ชันของโปรแกรม
Thomas Weller

1
@demonicdaron มันไม่ควรที่จะ; คำถามของ OP คือการรักษาโครงสร้างของโฟลเดอร์
MDMoore313

23

สั้นและชุด PowerShell ไม่แน่ใจว่า PS เวอร์ชันต่ำสุดจะทำงานกับอะไร

Remove-Item c:\Tmp\* -Recurse -Force

2
ดีและง่าย นี่เป็นการหลอกลวงในขณะที่คำตอบที่ยอมรับไม่ได้!
demonicdaron

นี่ควรเป็นคำตอบที่ได้รับการยอมรับคุณสามารถพิมพ์ได้rm *เพราะไม่แนะนำให้บังคับ (กล่องโต้ตอบการยืนยันมีตัวเลือก "ใช่เพื่อทั้งหมด" อยู่แล้ว)
J Garcia

22

คุณสามารถทำได้ด้วยdelคำสั่ง:

dir C:\folder
del /S *

/Sสวิทช์ที่จะลบเฉพาะไฟล์ซ้ำ


2
จะเป็นการลบไฟล์ แต่ทิ้งโฟลเดอร์ไว้หรือไม่
BobJim

5
ใช่. คุณสามารถเพิ่ม/Pตัวเลือกดังนั้นมันจะขอให้คุณยืนยันการลบทุกครั้งเพียงเพื่อตรวจสอบว่า
phoops

ขอบคุณป่วยให้ไป! หวังว่าจะประหยัดเวลาได้มาก!
BobJim

3
ใช่. และสำหรับการลบไฟล์ที่ซ่อนและระบบให้ทำattrib -s -r -h Folder\*.* /s /dก่อนที่จะลบ และสำหรับสิทธิ์ใช้takeownคำสั่ง
เจ็ต

2
และคุณสามารถใช้ / Q เพื่อไม่ขอการยืนยันเมื่อใช้อักขระตัวแทน
Aylatan

4

การอ่านระหว่างบรรทัดในคำถามต้นฉบับของคุณฉันสามารถเสนอบรรทัดรหัส BATCH ทางเลือกที่คุณสามารถใช้ได้ สิ่งนี้จะทำอย่างไรเมื่อรันเพียงลบไฟล์ที่มีอายุมากกว่า 60 วัน วิธีนี้คุณสามารถวางสิ่งนี้ไว้ในงานที่กำหนดเวลาไว้และเมื่อมันรันมันจะลบไฟล์ส่วนเกินที่คุณไม่ต้องการแทนที่จะลบไดเรกทอรีทั้งหมด คุณสามารถเปลี่ยน 60 ถึง 5 วันหรือ 1 วันถ้าคุณต้องการ นี่ไม่ได้เป็นการลบโฟลเดอร์

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

ขอบคุณสำหรับความคิด แต่ในปัจจุบันฉันคิดว่ากระบวนการ "ล้าง" จะแล้วเสร็จในกรอบเวลา adhoc ที่ไม่ได้กำหนดไว้มาก ฉันจะเก็บรหัสนั้นไว้สำหรับอนาคต! ไชโย
BobJim

ชื่อเรื่องจะอ่าน "ลบไฟล์ทั้งหมดจากโฟลเดอร์และโฟลเดอร์ย่อย" ดังนั้นนี่ไม่ใช่วิธีแก้ปัญหา
Anders Lindén


3

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

ด้วยตัวอย่าง: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

การใช้ PowerShell commnads เพื่อลบไฟล์

ลบรายการ -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

คำสั่งดังกล่าวจะดำเนินการและลบไฟล์“ DummyfiletoDelete.txt” ซึ่งอยู่ภายในตำแหน่ง“ C: \ dotnet-helpers”

การใช้ PowerShell commnads เพื่อลบไฟล์ทั้งหมด

ลบรายการ -Path "C: \ dotnet-helpers *. *"

การใช้ PowerShell commnads เพื่อลบไฟล์และโฟลเดอร์ทั้งหมด

ลบรายการ -Path "C: \ dotnet-helpers *. *" -recurse

-recurseเจาะลงและพบไฟล์จำนวนมาก –recurseพารามิเตอร์จะช่วยให้ PowerShell เพื่อลบรายการที่เด็ก ๆ ได้โดยไม่ต้องขออนุญาต นอกจากนี้คุณสามารถเพิ่มพารามิเตอร์ –force เพื่อลบไฟล์ที่ซ่อนอยู่หรือไฟล์แบบอ่านอย่างเดียว

การใช้คำสั่ง -Force เพื่อลบไฟล์อย่างตั้งใจ

การใช้คำสั่ง PowerShell เพื่อลบไฟล์ทั้งหมดอย่างมีประสิทธิภาพ

ลบรายการ -Path "C: \ dotnet-helpers *. *" -Force


1

ลองใช้ PowerShell ในตัวอย่างนี้ฉันต้องการลบไฟล์. class ทั้งหมด:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. ใน Windows Explorer ให้เลือก root dir ที่มีไฟล์และโฟลเดอร์ทั้งหมด

  2. ค้นหา *

  3. จัดเรียงตามประเภท (โฟลเดอร์ทั้งหมดจะอยู่ที่ด้านบนและไฟล์ทั้งหมดที่อยู่ด้านล่าง)

  4. เลือกไฟล์ทั้งหมดแล้วกด Delete

จะเป็นการลบไฟล์ทั้งหมดและเก็บรักษาโครงสร้างไดเรกทอรี


1

ลบไฟล์ทั้งหมดจากไดเรกทอรีปัจจุบันและไดเรกทอรีย่อย แต่ออกจากโครงสร้างโฟลเดอร์

( /Q) สวิตช์ใช้สำหรับถามผู้ใช้ว่าเขาสามารถลบได้หรือไม่

ข้อควรระวัง : ลองใช้โดยไม่มีการ/Qเพื่อให้แน่ใจว่าคุณไม่ได้ลบสิ่งที่มีค่า

del /S * /Q 

1

นี่เป็นวิธีที่ง่ายที่สุดใน IMO

เปิด PowerShell นำทางไปยังไดเรกทอรี ( cd) แล้ว

ls -Recurse * | rm

(Poof) ทุกอย่างหายไป ...

หากคุณต้องการลบตามส่วนขยายเฉพาะ

ls -Recurse *.docx | rm

ls กำลังแสดงรายการไดเรกทอรี

-Recurse เป็นธงบอกให้ PowerShell เข้าไปในไดเรกทอรีย่อย

* พูดทุกอย่าง

*.doc ทุกอย่างพร้อมด้วยนามสกุล. doc

| ฟีดเอาท์พุทจากซ้ายไปขวา

rm ลบ

คำตอบอื่น ๆ ทั้งหมดดูเหมือนจะทำให้สับสนมากกว่าที่จำเป็น


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

ในฐานะที่เป็นส่วนเติมเต็มให้กับคำตอบข้างต้นที่จริงแล้วไม่จำเป็นต้องใช้ Get-Childitem และส่งผลลัพธ์ไปยังไพพ์ไลน์ในคำตอบข้างต้นเนื่องจากคำหลัก -Include รวมอยู่ในคำสั่งลบรายการ

หนึ่งสามารถเพียง:

ลบรายการ - รวม " . " "C: \ Temp" - เรียกเก็บเงินอีกครั้ง

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