312

Using PowerShell, is it possible to remove some directory that contains files without prompting to confirm action?

Mwiza
  • 6,098
  • 3
  • 41
  • 35
hsz
  • 143,040
  • 58
  • 252
  • 308
  • Possible duplicate of [How to recursively delete an entire directory with PowerShell 2.0?](https://stackoverflow.com/questions/1752677/how-to-recursively-delete-an-entire-directory-with-powershell-2-0) – Michael Freidgeim Jul 11 '17 at 12:57

16 Answers16

447
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Ohad Schneider
  • 35,000
  • 11
  • 158
  • 195
Michael Price
  • 7,158
  • 1
  • 16
  • 24
  • 22
    I've found that I need to run this twice when run on a directory that contains subdirectories. The first time, there will be a lot of "The directory is not empty" errors. The second time, it completes with no errors. – Kristopher Johnson Dec 02 '11 at 20:02
  • 3
    If I want delete only contents of folder but not delete folder? – Kiquenet Mar 13 '13 at 08:26
  • 3
    @Kiquenet- This works for me, if I add a trailing slash to the path, so this example becomes Remove-Item .\foldertodelete\* -Force -Recurse – Adrian Carr Aug 19 '13 at 21:11
  • 4
    If you want it to ignore a missing folder you can add `-ErrorAction Ignore`, although that will also hide other errors. – Tor Klingberg May 13 '16 at 14:00
  • 3
    @Kiquenet Then you can use wildcards to remove everything within that folder: `Remove-Item './folder/*'`. If you really want to clear out only files of all folders you can list all leafs and pipe it to the Remove-Item cmdlet `Get-ChildItem -Recurse -File | Remove-Item` – Michael Kargl Jun 01 '19 at 11:32
  • 1
    To make the commands shorter ```rm /path -r -force``` – theshubhagrwl Feb 03 '21 at 12:25
75

From PowerShell remove force answer: help Remove-Item says:

The Recurse parameter in this cmdlet does not work properly

The command to workaround is

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

And then delete the folder itself

Remove-Item $Destination -Force 
Community
  • 1
  • 1
Michael Freidgeim
  • 23,917
  • 16
  • 136
  • 163
  • 1
    If I want delete only contents of folder but not delete folder? – Kiquenet Mar 13 '13 at 08:26
  • 3
    @beppe9000: I believe, yes. In the recent scripts I am using `Remove-Item -Recurse -Force $dir` and it works. – Michael Freidgeim Apr 04 '16 at 10:56
  • Ok, but I just read that the problem is still here on the windows 10 extended `Get-Help Remove-Item` documentation obtained after `Update-Help` is run... – beppe9000 Apr 04 '16 at 17:55
  • 2
    Get-ChildItem should also have the -Force argument, so that it also returns hidden files/folders. – Vlad Iliescu Apr 22 '16 at 09:20
  • @MichaelFreidgeim - I've used this and it has decreased intermittent failures, but they still occasionally happen. If Remove-Item -recurse is problematic for the top-level directory, can you explain why it would not be similarly problematic when it is piped into with the workaround line? Get-ChildItem -recurse doesn't return the children in a bottom-up order. Does Remove-Item order its pipelined input? – aggieNick02 May 03 '18 at 20:15
  • I think a potential failure mode with this is if $Destination is not specified, say while running a script that composes that value, the command deletes all the files in the directory in which you are working, which happened to me, but thanks be to git... – J E Carter II Feb 04 '21 at 22:08
  • 1
    I have modularized this answer into a function -- see [here](https://stackoverflow.com/a/37438430) – user2426679 Jun 03 '21 at 18:28
56

This worked for me:

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

Thus the folder is removed with all files in there and it is not producing error if folder path doesn't exists.

necrifede
  • 671
  • 5
  • 8
30

2018 Update

In the current version of PowerShell (tested with v5.1 on Windows 10 1809) one can use the simpler Unix syntax rm -R .\DirName to silently delete the directory .\DirName with all subdirectories and files it may contain. In fact many common Unix commands work in the same way in PowerShell as in a Linux command line.

One can also clean up a folder, but not the folder itself, using rm -R .\DirName\* (noted by Jeff in the comments).

divenex
  • 12,429
  • 9
  • 51
  • 51
  • 5
    You can also use `rm -R .\DirName\*` to clean up the folder without deleting the folder itself – Jeff Chen May 17 '19 at 03:42
  • 3
    none of the powershell commands nor this one works for me on a 2016 server core computer. They all say, `cannot be removed because it is not empty'. I also tried the rd command in windows. I can move the folder anywhere, just can't delete. – Post Impatica Mar 03 '20 at 14:01
14

in short, We can use rm -r -fo {folderName} to remove the folder recursively (remove all the files and folders inside) and force

Salman
  • 463
  • 7
  • 9
10

To delete content without a folder you can use the following:

Remove-Item "foldertodelete\*" -Force -Recurse
Eric Pohl
  • 2,304
  • 1
  • 21
  • 31
8

rm -Force -Recurse -Confirm:$false $directory2Delete didn't work in the PowerShell ISE, but it worked through the regular PowerShell CLI.

I hope this helps. It was driving me bannanas.

Peter Mortensen
  • 30,030
  • 21
  • 100
  • 124
Flightdeck73
  • 183
  • 1
  • 7
  • Thank you, same goes for me! FInally this folder was deleted when calling from `PowerShell CLI` and not while developing in `PowerShell ISE`. – Bruno Bieri Aug 20 '18 at 11:58
5

This worked for me:

Remove-Item C:\folder_name -Force -Recurse
variable
  • 6,123
  • 5
  • 52
  • 127
5

Powershell works with relative folders. The Remove-Item has couple of useful aliases which aligns with unix. Some examples:

rm -R -Force ./directory
del -R -Force ./directory/*
3

Below is a copy-pasteable implementation of Michael Freidgeim's answer

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
    }
}
user2426679
  • 2,647
  • 1
  • 29
  • 29
1
$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
}
CDspace
  • 2,611
  • 17
  • 32
  • 36
Anderson Braz
  • 141
  • 1
  • 4
1

Since my directory was in C:\users I had to run my powershell as administrator,

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

this command worked for me.

OMKAR AGRAWAL
  • 118
  • 1
  • 8
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
}
Community
  • 1
  • 1
Anderson Braz
  • 141
  • 1
  • 4
0

If you have your folder as an object, let's say that you created it in the same script using next command:

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

Then you can just remove it like this in the same script

$folder.Delete($true)

$true - states for recursive removal

0

If you want to concatenate a variable with a fixed path and a string as the dynamic path into a whole path to remove the folder, you may need the following command:

$fixPath = "C:\Users\myUserName\Desktop"
Remove-Item ("$fixPath" + "\Folder\SubFolder") -Recurse

In the variable $newPath the concatenate path is now: "C:\Users\myUserName\Desktop\Folder\SubFolder"

So you can remove several directories from the starting point ("C:\Users\myUserName\Desktop"), which is already defined and fixed in the variable $fixPath.

$fixPath = "C:\Users\myUserName\Desktop"
Remote-Item ("$fixPath" + "\Folder\SubFolder") -Recurse
Remote-Item ("$fixPath" + "\Folder\SubFolder1") -Recurse
Remote-Item ("$fixPath" + "\Folder\SubFolder2") -Recurse
SwissCodeMen
  • 3,359
  • 4
  • 15
  • 26
0

Some multi-level directory folders need to be deleted twice, which has troubled me for a long time. Here is my final code, it works for me, and cleans up nicely, hope it helps.

function ForceDelete {
    [CmdletBinding()]
    param(
        [string] $path
    )
    
    rm -r -fo $path
    
    if (Test-Path -Path $path){
        Start-Sleep -Seconds 1
        Write-Host "Force delete retrying..." -ForegroundColor white -BackgroundColor red
        rm -r -fo $path
    }
}

ForceDelete('.\your-folder-name')
ForceDelete('.\your-file-name.php')
  • this is just a wrapper around answers already posted. what benefit do you see in your Answer over the others? ///// also, calling a function with `()` around the values is not correct in PoSh ... that just says "treat this as an array". – Lee_Dailey Apr 16 '22 at 09:02