Comment supprimer discrètement un répertoire avec du contenu dans PowerShell

Réponses:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
la source
16
J'ai constaté que je dois l'exécuter deux fois lorsqu'il est exécuté sur un répertoire contenant des sous-répertoires. La première fois, il y aura beaucoup d'erreurs "Le répertoire n'est pas vide". La deuxième fois, il se termine sans erreur.
Kristopher Johnson
1
Si je veux supprimer uniquement le contenu du dossier mais pas supprimer le dossier?
Kiquenet
2
@ Kiquenet- Cela fonctionne pour moi, si j'ajoute une barre oblique au chemin, donc cet exemple devient Remove-Item. \ Foldertodelete * -Force -Recurse
Adrian Carr
3
Si vous voulez qu'il ignore un dossier manquant, vous pouvez ajouter -ErrorAction Ignore , bien que cela masque également d'autres erreurs.
Tor Klingberg
2
@Kiquenet Ensuite , vous pouvez utiliser des caractères génériques pour supprimer tout dans ce dossier: Remove-Item './folder/*'. Si vous voulez vraiment effacer uniquement les fichiers de tous les dossiers, vous pouvez répertorier toutes les feuilles et les diriger vers l'applet de commande Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

Dans PowerShell, supprimez la réponse forcée : l'aide Remove-Item indique:

Le paramètre Recurse de cette applet de commande ne fonctionne pas correctement

La commande de contournement est

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

Et puis supprimez le dossier lui-même

Remove-Item $Destination -Force 
Michael Freidgeim
la source
1
Si je veux supprimer uniquement le contenu du dossier mais pas supprimer le dossier?
Kiquenet
3
@ beppe9000: Je crois que oui. Dans les scripts récents que j'utilise Remove-Item -Recurse -Force $diret cela fonctionne.
Michael Freidgeim
D'accord, mais je viens de lire que le problème est toujours présent sur la Get-Help Remove-Itemdocumentation étendue de Windows 10 obtenue après l' Update-Helpexécution ...
beppe9000
2
Get-ChildItem doit également avoir l'argument -Force, afin qu'il renvoie également les fichiers / dossiers cachés.
Vlad Iliescu
@MichaelFreidgeim - J'ai utilisé cela et cela a diminué les échecs intermittents, mais ils se produisent encore occasionnellement. Si Remove-Item -recurse est problématique pour le répertoire de niveau supérieur, pouvez-vous expliquer pourquoi il ne serait pas pareillement problématique lorsqu'il est canalisé avec la ligne de contournement? Get-ChildItem -recurse ne renvoie pas les enfants dans un ordre ascendant. Remove-Item commande-t-il son entrée en pipeline?
aggieNick02
42

Cela a fonctionné pour moi:

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

Ainsi, le dossier est supprimé avec tous les fichiers qu'il contient et il ne produit pas d'erreur si le chemin d'accès au dossier n'existe pas.

nécrifier
la source
Cela ne supprime pas le dossier.
variable
13

Mise à jour 2018

Dans la version actuelle de PowerShell (testée avec la v5.1 sur Windows 10 1809), on peut utiliser la syntaxe Unix plus simple rm -R .\DirNamepour supprimer silencieusement le répertoire .\DirNameavec tous les sous-répertoires et fichiers qu'il peut contenir. En fait, de nombreuses commandes Unix courantes fonctionnent de la même manière dans PowerShell que dans une ligne de commande Linux.

divenex
la source
Vous pouvez également utiliser rm -R .\DirName\*pour nettoyer le dossier sans supprimer le dossier lui
Jeff Chen
aucune des commandes powershell ni celle-ci ne fonctionne pour moi sur un ordinateur de base serveur 2016. Ils disent tous: "ne peut pas être retiré car il n'est pas vide". J'ai également essayé la commande rd dans Windows. Je peux déplacer le dossier n'importe où, je ne peux tout simplement pas le supprimer.
Helzgate
10

Pour supprimer du contenu sans dossier, vous pouvez utiliser les éléments suivants:

Remove-Item "foldertodelete\*" -Force -Recurse
Dmitriy N. Laykom
la source
6

rm -Force -Recurse -Confirm:$false $directory2Deleten'a pas fonctionné dans PowerShell ISE , mais il fonctionnait via la CLI PowerShell standard.

J'espère que ça aide. Ça me rendait banane.

Flightdeck73
la source
Merci, c'est la même chose pour moi! Finalement, ce dossier a été supprimé lors de l'appel depuis PowerShell CLIet non lors du développement dans PowerShell ISE.
Bruno Bieri
3

en bref, nous pouvons utiliser rm -r -fo {folderName}pour supprimer le dossier récursivement (supprimer tous les fichiers et dossiers à l'intérieur) et forcer

Salman
la source
2

Ci-dessous, une implémentation copiable de la réponse de 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
    }
}
user2426679
la source
1

Étant donné que mon répertoire était dans C: \ users, j'ai dû exécuter mon PowerShell en tant qu'administrateur,

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

cette commande a fonctionné pour moi.

Omkar Agrawal
la source
2
Tout comme une note secondaire: delest un alias pour 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
}
Anderson Braz
la source
Sur le script ci-dessus, j'imprime le nom complet du dossier et le supprime. \ o /
Anderson Braz
0

Si vous avez votre dossier en tant qu'objet, disons que vous l'avez créé dans le même script en utilisant la commande suivante:

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

Ensuite, vous pouvez simplement le supprimer comme ça dans le même script

$folder.Delete($true)

$ true - états pour la suppression récursive

Dmitriy Reznikov
la source
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
la source
Sur le script ci-dessus, j'imprime le nom complet du dossier et le supprime. Un bon travail ...
Anderson Braz
1
Bonjour Anderson, vous devriez modifier les réponses si vous ne prévoyez pas d'ajouter 2 réponses différentes, peut-être voulez-vous en supprimer une?
bummi
0

Cela a fonctionné pour moi:

Remove-Item C:\folder_name -Force -Recurse
variable
la source