Come rimuovere tranquillamente una directory con contenuto in PowerShell


Risposte:


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

16
Ho scoperto che devo eseguirlo due volte quando eseguito su una directory che contiene sottodirectory. La prima volta, ci saranno molti errori "La directory non è vuota". La seconda volta, si completa senza errori.
Kristopher Johnson,

1
Se voglio eliminare solo i contenuti della cartella ma non eliminare la cartella?
Kiquenet,

2
@ Kiquenet- Questo funziona per me, se aggiungo una barra finale al percorso, quindi questo esempio diventa Remove-Item. \ Foldertodelete * -Force -Recurse
Adrian Carr

3
Se vuoi che ignori una cartella mancante puoi aggiungere -ErrorAction Ignore, anche se questo nasconderà anche altri errori.
Tor Klingberg,

2
@Kiquenet Quindi è possibile utilizzare i caratteri jolly per rimuovere tutto ciò all'interno della cartella: Remove-Item './folder/*'. Se si desidera veramente cancellare solo i file di tutte le cartelle, è possibile elencare tutte le foglie e reindirizzarle al cmdlet Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl,

62

Da PowerShell rimuovere la risposta forzata : aiuto Rimuovi-elemento dice:

Il parametro Recurse in questo cmdlet non funziona correttamente

Il comando per risolvere il problema è

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

E quindi eliminare la cartella stessa

Remove-Item $Destination -Force 

1
Se voglio eliminare solo i contenuti della cartella ma non eliminare la cartella?
Kiquenet,

3
@ beppe9000: credo di si. Negli script recenti che sto usando Remove-Item -Recurse -Force $dire funziona.
Michael Freidgeim,

Ok, ma ho appena letto che il problema è ancora qui sulla Get-Help Remove-Itemdocumentazione estesa di Windows 10 ottenuta dopo l' Update-Helpesecuzione ...
beppe9000

2
Get-ChildItem dovrebbe anche avere l'argomento -Force, in modo che restituisca anche file / cartelle nascosti.
Vlad Iliescu,

@MichaelFreidgeim - L'ho usato e ha ridotto i guasti intermittenti, ma a volte si verificano ancora. Se Remove-Item -recurse è problematico per la directory di livello superiore, puoi spiegare perché non sarebbe altrettanto problematico quando viene reindirizzato con la riga alternativa? Get-ChildItem -recurse non restituisce i bambini in un ordine dal basso verso l'alto. Remove-Item ordina il suo input pipeline?
aggieNick02,

42

Questo ha funzionato per me:

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

Pertanto, la cartella viene rimossa con tutti i file presenti e non produce errori se il percorso della cartella non esiste.


Questo non cancella la cartella.
variabile

13

Aggiornamento 2018

Nella versione corrente di PowerShell (testato con v5.1 su Windows 10 1809) è possibile utilizzare la sintassi Unix più semplice rm -R .\DirNameper eliminare silenziosamente la directory .\DirNamecon tutte le sottodirectory e i file che può contenere. In effetti molti comandi Unix comuni funzionano allo stesso modo in PowerShell come in una riga comandi Linux.


Puoi anche usare rm -R .\DirName\*per ripulire la cartella senza eliminare la cartella stessa
Jeff Chen,

nessuno dei comandi PowerShell né questo funziona per me su un computer core del server 2016. Dicono tutti, "non può essere rimosso perché non è vuoto". Ho anche provato il comando rd in Windows. Posso spostare la cartella ovunque, semplicemente non posso eliminare.
Helzgate,

10

Per eliminare il contenuto senza una cartella è possibile utilizzare quanto segue:

Remove-Item "foldertodelete\*" -Force -Recurse

6

rm -Force -Recurse -Confirm:$false $directory2Deletenon ha funzionato in PowerShell ISE , ma ha funzionato tramite la normale CLI di PowerShell.

Spero che aiuti. Mi stava facendo impazzire.


Grazie, lo stesso vale per me! Finalmente questa cartella è stata eliminata durante la chiamata da PowerShell CLIe non durante lo sviluppo in PowerShell ISE.
Bruno Bieri,

3

in breve, possiamo usare rm -r -fo {folderName}per rimuovere la cartella in modo ricorsivo (rimuovere tutti i file e le cartelle all'interno) e forzare


2

Di seguito è riportata un'implementazione copia-incollabile della risposta di 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

Dato che la mia directory era in C: \ utenti dovevo eseguire il mio powershell come amministratore,

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

questo comando ha funzionato per me.


2
Proprio come una nota a margine: delè un alias per 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
}

Sullo script sopra, stampo il nome completo della cartella e lo rimuovo. \ o /
Anderson Braz,

0

Se hai la tua cartella come oggetto, diciamo che l'hai creata nello stesso script usando il comando successivo:

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

Quindi puoi semplicemente rimuoverlo in questo modo nello stesso script

$folder.Delete($true)

$ true: indica la rimozione ricorsiva


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
}

Sullo script sopra, stampo il nome completo della cartella e lo rimuovo. Un buon lavoro ...
Anderson Braz,

1
Ciao Anderson, dovresti modificare le risposte se non hai intenzione di aggiungere 2 risposte diverse, forse vuoi eliminarne una?
bummi,

0

Questo ha funzionato per me:

Remove-Item C:\folder_name -Force -Recurse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.