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


Réponses:


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

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 

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.


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.


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

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.


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


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
    }
}

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.


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
}

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


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
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.