วิธีลบไดเรกทอรีที่มีเนื้อหาใน PowerShell อย่างเงียบ ๆ


231

การใช้ PowerShell เป็นไปได้ไหมที่จะลบบางไดเรกทอรีที่มีไฟล์โดยไม่ต้องแจ้งให้ทำการยืนยัน?


คำตอบ:


340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse

16
ฉันพบว่าฉันต้องเรียกใช้สองครั้งเมื่อเรียกใช้ในไดเรกทอรีที่มีไดเรกทอรีย่อย ในครั้งแรกจะมีข้อผิดพลาด "ไดเรกทอรีไม่ว่าง" จำนวนมาก ครั้งที่สองมันเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด
Kristopher Johnson

1
หากฉันต้องการลบเฉพาะเนื้อหาของโฟลเดอร์ แต่ไม่ลบโฟลเดอร์
Kiquenet

2
@ Kiquenet- ใช้งานได้กับฉันถ้าฉันเพิ่มเครื่องหมายสแลชต่อท้ายเส้นทางดังนั้นตัวอย่างนี้กลายเป็น Remove-Item \ foldertodelete *
รี

3
หากคุณต้องการให้ละเว้นโฟลเดอร์ที่หายไปคุณสามารถเพิ่ม -ErrorAction Ignoreได้แม้ว่านั่นจะเป็นการซ่อนข้อผิดพลาดอื่น ๆ
Tor Klingberg

2
@Kiquenet Remove-Item './folder/*'แล้วคุณสามารถใช้สัญลักษณ์ในการลบทุกอย่างที่อยู่ในโฟลเดอร์ที่: หากคุณต้องการล้างเฉพาะไฟล์ของโฟลเดอร์ทั้งหมดคุณสามารถแสดงรายการ leafs ทั้งหมดและไปป์ที่รายการ Remove-Item cmdletGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl

62

จากPowerShell ลบคำตอบบังคับ : ช่วย Remove-Item พูดว่า:

พารามิเตอร์ Recurse ใน cmdlet นี้ทำงานไม่ถูกต้อง

คำสั่งในการแก้ปัญหาคือ

Get-ChildItem -Path $Destination -Recurse | Remove-Item -force -recurse

แล้วลบโฟลเดอร์เอง

Remove-Item $Destination -Force 

1
หากฉันต้องการลบเฉพาะเนื้อหาของโฟลเดอร์ แต่ไม่ลบโฟลเดอร์
Kiquenet

3
@ beppe9000: ฉันเชื่อว่าใช่ ในสคริปต์ล่าสุดที่ฉันใช้Remove-Item -Recurse -Force $dirและใช้งานได้
Michael Freidgeim

ตกลง แต่ฉันเพิ่งอ่านว่าปัญหายังคงอยู่ที่นี่ในGet-Help Remove-Itemเอกสารประกอบแบบขยาย windows 10 ที่ได้รับหลังจากUpdate-Helpเรียกใช้ ...
beppe9000

2
รับ ChildItem ควรมีอาร์กิวเมนต์ -Force เพื่อที่จะส่งคืนไฟล์ / โฟลเดอร์ที่ซ่อนอยู่
Vlad Iliescu

@MichaelFreidgeim - ฉันเคยใช้มันและมันได้ลดความล้มเหลวเป็นระยะ ๆ แต่ก็ยังเกิดขึ้นเป็นครั้งคราว หาก Remove-Item -recurse เป็นปัญหาสำหรับไดเรกทอรีระดับบนสุดคุณสามารถอธิบายได้หรือไม่ว่าทำไมมันจะไม่เป็นปัญหาที่คล้ายกันเมื่อถูกส่งไปยังบรรทัดการแก้ไขปัญหา? รับ ChildItem - เงินคืนไม่ส่งคืนเด็กตามลำดับจากล่างขึ้นบน Remove-Item สั่งซื้อ pipelined input หรือไม่?
aggieNick02

42

สิ่งนี้ใช้ได้กับฉัน:

Remove-Item $folderPath -Force  -Recurse -ErrorAction SilentlyContinue

ดังนั้นโฟลเดอร์จะถูกลบด้วยไฟล์ทั้งหมดที่อยู่ในนั้นและจะไม่เกิดข้อผิดพลาดหากไม่มีเส้นทางของโฟลเดอร์


นี่ไม่ได้เป็นการลบโฟลเดอร์
ตัวแปร

13

อัพเดต 2018

ในรุ่นปัจจุบันของ PowerShell (ทดสอบกับ v5.1 บน Windows 10 1809) ผู้ใช้หนึ่งสามารถใช้ไวยากรณ์ Unix ที่ง่ายกว่าrm -R .\DirNameเพื่อลบไดเรกทอรี.\DirNameด้วยไดเรกทอรีย่อยและไฟล์ทั้งหมดที่อยู่ในนั้น ในความเป็นจริงคำสั่ง Unix ทั่วไปทำงานในแบบเดียวกันกับ PowerShell เหมือนกับในบรรทัดคำสั่ง Linux


คุณสามารถใช้rm -R .\DirName\*ทำความสะอาดโฟลเดอร์โดยไม่ต้องลบโฟลเดอร์เอง
Jeff Chen

ไม่มีคำสั่ง powershell หรือสิ่งนี้ใช้ได้สำหรับฉันบนคอมพิวเตอร์เซิร์ฟเวอร์หลักของปี 2016 พวกเขาทั้งหมดพูดว่า `ไม่สามารถลบออกได้เพราะไม่ว่างเปล่า ' ฉันยังลองใช้คำสั่ง rd ใน windows ฉันสามารถย้ายโฟลเดอร์ได้ทุกที่ไม่สามารถลบได้
Helzgate

10

หากต้องการลบเนื้อหาที่ไม่มีโฟลเดอร์คุณสามารถใช้สิ่งต่อไปนี้:

Remove-Item "foldertodelete\*" -Force -Recurse

6

rm -Force -Recurse -Confirm:$false $directory2Deleteไม่ทำงานในPowerShell ISEแต่ทำงานผ่าน PowerShell CLI ปกติ

ฉันหวังว่านี่จะช่วยได้. มันเป็นแรงขับดันฉัน bannanas


ขอบคุณเหมือนกันไปสำหรับฉัน! สุดท้ายโฟลเดอร์นี้ถูกลบเมื่อโทรจากและไม่ได้ในขณะที่การพัฒนาPowerShell CLI PowerShell ISE
Bruno Bieri

3

ในระยะสั้นเราสามารถใช้rm -r -fo {folderName}เพื่อลบโฟลเดอร์ซ้ำ (ลบไฟล์และโฟลเดอร์ทั้งหมดภายใน) และบังคับ


2

ด้านล่างนี้เป็นการนำคำตอบของ Michael Freidgeim ไปใช้ในการคัดลอกได้

function Delete-FolderAndContents {
    # http://stackoverflow.com/a/9012108

    param(
        [Parameter(Mandatory=$true, Position=1)] [string] $folder_path
    )

    process {
        $child_items = ([array] (Get-ChildItem -Path $folder_path -Recurse -Force))
        if ($child_items) {
            $null = $child_items | Remove-Item -Force -Recurse
        }
        $null = Remove-Item $folder_path -Force
    }
}

1

เนื่องจากไดเรกทอรีของฉันอยู่ใน C: \ users ฉันต้องเรียกใช้ powershell ในฐานะผู้ดูแลระบบ

del ./[your Folder name] -Force -Recurse

คำสั่งนี้ใช้ได้สำหรับฉัน


2
เช่นเดียวกับด้านข้างหมายเหตุ: เป็นนามแฝงสำหรับdel Remove-Item
Michael Kargl

0
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*temp*"}
foreach ($Folder in $Folders) 
{
    $Item =  $Folder.FullName
    Write-Output $Item
    Remove-Item $Item -Force -Recurse
}

ในสคริปต์ข้างต้นฉันพิมพ์ชื่อเต็มของโฟลเดอร์และลบมัน \ o /
Anderson Braz

0

หากคุณมีโฟลเดอร์เป็นวัตถุสมมติว่าคุณสร้างมันในสคริปต์เดียวกันโดยใช้คำสั่งถัดไป:

$folder = New-Item -ItemType Directory -Force -Path "c:\tmp" -Name "myFolder"

จากนั้นคุณสามารถลบแบบนี้ในสคริปต์เดียวกัน

$folder.Delete($true)

$ true - สถานะสำหรับการลบแบบเรียกซ้ำ


0
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*grav*"} # Your keyword name directories

foreach ($Folder in $Folders) 
{
    $Item =  $Folder.FullName
    Write-Output $Item
    Remove-Item $Item -Force -Recurse -ErrorAction SilentlyContinue
}

ในสคริปต์ข้างต้นฉันพิมพ์ชื่อเต็มของโฟลเดอร์และลบมัน เป็นงานที่ดี ...
Anderson Braz

1
สวัสดีเดอร์สันคุณควรแก้ไขคำตอบหากคุณไม่ได้วางแผนที่จะเพิ่ม 2 คำตอบที่แตกต่างกันบางทีคุณอาจต้องการลบคำตอบอย่างใดอย่างหนึ่งหรือไม่
bummi

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