Cách lặng lẽ xóa một thư mục có nội dung trong PowerShell


Câu trả lời:


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

16
Tôi thấy rằng tôi cần chạy cái này hai lần khi chạy trên một thư mục chứa các thư mục con. Lần đầu tiên, sẽ có rất nhiều lỗi "Thư mục không trống". Lần thứ hai, nó hoàn thành không có lỗi.
Kristopher Johnson

1
Nếu tôi muốn xóa chỉ nội dung của thư mục nhưng không xóa thư mục?
Kiquenet

2
@ Kiquenet- Điều này hiệu quả với tôi, nếu tôi thêm dấu gạch chéo vào đường dẫn, vì vậy ví dụ này sẽ trở thành mục Loại bỏ. \ Foldertodelete * -Force -Recurse
Adrian Carr

3
Nếu bạn muốn nó bỏ qua một thư mục bị thiếu, bạn có thể thêm -ErrorAction Ignore, mặc dù điều đó cũng sẽ ẩn các lỗi khác.
Tor Klingberg

2
@Kiquenet Sau đó, bạn có thể sử dụng ký tự đại diện để xóa mọi thứ trong thư mục đó : Remove-Item './folder/*'. Nếu bạn thực sự muốn xóa chỉ các tệp của tất cả các thư mục, bạn có thể liệt kê tất cả các lá và chuyển nó vào lệnh ghép ngắn Loại bỏGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl

62

Từ PowerShell loại bỏ câu trả lời bắt buộc : help Remove-Item nói:

Tham số Recurse trong lệnh ghép ngắn này không hoạt động đúng

Lệnh để giải quyết là

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

Và sau đó xóa thư mục chính nó

Remove-Item $Destination -Force 

1
Nếu tôi muốn xóa chỉ nội dung của thư mục nhưng không xóa thư mục?
Kiquenet

3
@ beppe9000: Tôi tin, vâng. Trong các kịch bản gần đây tôi đang sử dụng Remove-Item -Recurse -Force $dirvà nó hoạt động.
Michael Freidgeim

Ok, nhưng tôi chỉ đọc rằng vấn đề vẫn còn ở đây trên Windows 10 Get-Help Remove-Itemtài liệu mở rộng thu được sau khi Update-Helpchạy ...
beppe9000

2
Get-ChildItem cũng nên có đối số -Force, để nó cũng trả về các tệp / thư mục ẩn.
Vlad Iliescu

@MichaelFreidgeim - Tôi đã sử dụng cái này và nó đã giảm những thất bại không liên tục, nhưng chúng vẫn thỉnh thoảng xảy ra. Nếu Remove-Item -recurse có vấn đề đối với thư mục cấp cao nhất, bạn có thể giải thích lý do tại sao nó sẽ không có vấn đề tương tự khi nó được dẫn vào dòng giải pháp không? Get-ChildItem -recurse không trả lại trẻ theo thứ tự từ dưới lên. Liệu Remove-Item có đặt hàng đầu vào theo đường ống không?
aggieNick02

42

Điều này làm việc cho tôi:

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

Do đó, thư mục được xóa với tất cả các tệp trong đó và nó không tạo ra lỗi nếu đường dẫn thư mục không tồn tại.


Điều này không xóa thư mục.
biến

13

Cập nhật 2018

Trong phiên bản hiện tại của PowerShell (đã được thử nghiệm với v5.1 trên Windows 10 1809), người ta có thể sử dụng cú pháp Unix đơn giản hơn rm -R .\DirNameđể âm thầm xóa thư mục .\DirNamevới tất cả các thư mục con và tệp mà nó có thể chứa. Trong thực tế, nhiều lệnh Unix phổ biến hoạt động theo cùng một cách trong PowerShell như trong một dòng lệnh Linux.


Bạn cũng có thể sử dụng rm -R .\DirName\*để dọn dẹp thư mục mà không cần xóa chính thư mục
Jeff Chen

không có lệnh powershell hay lệnh nào hoạt động với tôi trên máy tính lõi máy chủ 2016. Tất cả họ đều nói, 'không thể xóa vì nó không trống'. Tôi cũng đã thử lệnh nd trong windows. Tôi có thể di chuyển thư mục bất cứ nơi nào, không thể xóa.
Helzgate ngày

10

Để xóa nội dung mà không có thư mục, bạn có thể sử dụng như sau:

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

6

rm -Force -Recurse -Confirm:$false $directory2Deleteđã không hoạt động trong PowerShell ISE , nhưng nó hoạt động thông qua PowerShell CLI thông thường.

Tôi hi vọng cái này giúp được. Nó đang lái tôi bannana.


Cảm ơn bạn, cùng đi cho tôi! Trong thư mục này đã bị xóa khi gọi từ PowerShell CLIvà không trong khi phát triển PowerShell ISE.
Bruno Bieri

3

Nói tóm lại, chúng ta có thể sử dụng rm -r -fo {folderName}để loại bỏ thư mục một cách đệ quy (loại bỏ tất cả các tệp và thư mục bên trong) và buộc


2

Dưới đây là bản triển khai có thể sao chép câu trả lời của 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

Vì thư mục của tôi nằm trong C: \ users, tôi phải chạy quyền hạn của mình với tư cách quản trị viên,

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

lệnh này đã làm việc cho tôi.


2
Cũng như một lưu ý phụ: dellà một bí danh cho 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
}

Trên tập lệnh ở trên tôi in tên đầy đủ của thư mục và loại bỏ nó. \ o /
Anderson Braz

0

Nếu bạn có thư mục của mình làm đối tượng, giả sử bạn đã tạo thư mục đó trong cùng một tập lệnh bằng lệnh tiếp theo:

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

Sau đó, bạn có thể loại bỏ nó như thế này trong cùng một kịch bản

$folder.Delete($true)

$ true - trạng thái để loại bỏ đệ quy


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
}

Trên tập lệnh ở trên tôi in tên đầy đủ của thư mục và loại bỏ nó. Một công việc tốt ...
Anderson Braz

1
Xin chào Anderson, bạn nên chỉnh sửa câu trả lời nếu bạn không định thêm 2 câu trả lời khác nhau, có lẽ bạn muốn xóa một trong số chúng?
bummi

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.