Как тихо удалить каталог с содержимым в PowerShell


Ответы:


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

16
Я обнаружил, что мне нужно запустить это дважды при запуске в каталоге, который содержит подкаталоги. В первый раз будет много ошибок «Каталог не пуст». Второй раз он завершается без ошибок.
Кристофер Джонсон

1
Если я хочу удалить только содержимое папки, но не удалить папку?
Kiquenet

2
@ Kiquenet - это работает для меня, если я добавляю косую черту в путь, поэтому этот пример становится Remove-Item. \ Foldertodelete * -Force -Recurse
Adrian Carr

3
Если вы хотите, чтобы он игнорировал отсутствующую папку, вы можете добавить ее -ErrorAction Ignore, хотя это также скроет другие ошибки.
Тор Клингберг

2
@Kiquenet Затем вы можете использовать подстановочные знаки , чтобы удалить все , что в этой папке: Remove-Item './folder/*'. Если вы действительно хотите очистить только файлы всех папок, вы можете перечислить все листья и Get-ChildItem -Recurse -File | Remove-Item
Michael Kargl

62

Из PowerShell удалите принудительный ответ : help Remove-Item говорит:

Параметр Recurse в этом командлете не работает должным образом

Команда для обхода

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

А затем удалите саму папку

Remove-Item $Destination -Force 

1
Если я хочу удалить только содержимое папки, но не удалить папку?
Kiquenet

3
@ beppe9000: я верю, да. В последних сценариях я использую, Remove-Item -Recurse -Force $dirи это работает.
Майкл Фрейдгейм

Хорошо, но я только что прочитал, что проблема все еще здесь на расширенной Get-Help Remove-Itemдокументации Windows 10, полученной после Update-Helpзапуска ...
beppe9000

2
Get-ChildItem также должен иметь аргумент -Force, чтобы он также возвращал скрытые файлы / папки.
Влад Илиеску

@MichaelFreidgeim - я использовал это, и это уменьшило периодические сбои, но они все еще иногда случаются. Если Remove-Item -recurse является проблематичным для каталога верхнего уровня, можете ли вы объяснить, почему он не будет таким же проблематичным, когда он передается в обходной строке? Get-ChildItem -recurse не возвращает детей в порядке снизу вверх. Order-Item упорядочивает свой конвейерный ввод?
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\*для очистки папки, не удаляя саму папку
Джефф Чен

ни одна из команд powershell, ни эта, не работают для меня на главном компьютере 2016 года. Все они говорят: «нельзя удалить, потому что он не пустой». Я также попробовал команду rd в Windows. Я могу переместить папку куда угодно, но не могу удалить.
Хельзгейт


6

rm -Force -Recurse -Confirm:$false $directory2Deleteне работал в PowerShell ISE , но работал через обычный интерфейс командной строки PowerShell.

Надеюсь, это поможет. Это сводило меня с ума.


Спасибо, то же самое касается меня! В конце концов, эта папка была удалена при вызове, PowerShell CLIа не при разработке PowerShell ISE.
Бруно Биери

3

Короче говоря, мы можем использовать, rm -r -fo {folderName}чтобы удалить папку рекурсивно (удалить все файлы и папки внутри) и заставить


2

Ниже приведена копируемая реализация ответа Михаила Фрейдгейма

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.
Майкл Каргл

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
}

По сценарию выше я печатаю полное имя папки и удаляю ее. \ о /
Андерсон 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
}

По сценарию выше я печатаю полное имя папки и удаляю ее. Хорошая работа ...
Андерсон Браз

1
Привет Андерсон, тебе следует отредактировать ответы, если ты не планируешь добавлять 2 разных ответа, может быть, ты хочешь удалить один из них?
Бумми

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.