Як тихо видалити каталог із вмістом у PowerShell


Відповіді:


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

16
Я виявив, що мені потрібно запустити це двічі під час запуску в каталозі, що містить підкаталоги. Перший час буде багато помилок "Каталог не порожній". Вдруге він завершується без помилок.
Крістофер Джонсон

1
Якщо я хочу видалити лише вміст папки, але не видалити папку?
Кікенет

2
@ Kiquenet- Це працює для мене, якщо я додаю косу косу рису на шлях, тому цей приклад стає Remove-Item. \ Foldertodelete * -Force -Recurse
Адріан Карр

3
Якщо ви хочете, щоб вона ігнорувала відсутню папку, ви можете додати -ErrorAction Ignore, хоча це також приховає інші помилки.
Тор Клінгберг

2
@Kiquenet Потім ви можете використовувати символи узагальнення , щоб видалити всі , що в цій папці: Remove-Item './folder/*'. Якщо ви дійсно хочете очистити лише файли з усіх папок, ви можете перелічити всі аркуші та передати їх командлету Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Майкл Каргл

62

З PowerShell видалити силу відповіді : довідка Remove-Item говорить:

Параметр Recurse в цьому командлеті не працює належним чином

Команда для вирішення є

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

А потім видаліть саму папку

Remove-Item $Destination -Force 

1
Якщо я хочу видалити лише вміст папки, але не видалити папку?
Кікенет

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

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

2
Get-ChildItem також повинен мати аргумент -Force, щоб він також повертав приховані файли / папки.
Влад Ілієску

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

жодна з команд powerhell, ні ця, не працює для мене на базовому комп'ютері сервера 2016 року. Всі вони говорять: "неможливо видалити, оскільки воно не порожнє". Я також спробував команду rd у Windows. Я можу перемістити папку будь-де, просто не можу видалити.
Хельцгейт


6

rm -Force -Recurse -Confirm:$false $directory2Deleteне працював у PowerShell ISE , але він працював через звичайний PowerShell CLI.

Я сподіваюся, що це допомагає. Це водило мене бананами.


Дякую, те саме стосується і мене! Фінально ця папка була видалена під час дзвінка з, 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: \ користувачів, мені довелося запустити свою повноваження як адміністратор,

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
}

На скрипті вище я друкую повне ім'я папки та видаляю її. \ o /
Андерсон Браз

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 різні відповіді, можливо, ви хочете видалити одну з них?
bummi

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.