Cómo eliminar silenciosamente un directorio con contenido en PowerShell

Respuestas:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
fuente
16
Descubrí que necesito ejecutar esto dos veces cuando se ejecuta en un directorio que contiene subdirectorios. La primera vez, habrá muchos errores de "El directorio no está vacío". La segunda vez, se completa sin errores.
Kristopher Johnson
1
Si quiero eliminar solo el contenido de la carpeta pero no eliminar la carpeta?
Kiquenet
2
@ Kiquenet: esto funciona para mí, si agrego una barra inclinada final a la ruta, por lo que este ejemplo se convierte en Eliminar elemento. \ Foldertodelete * -Force -Recurse
Adrian Carr
3
Si desea que ignore una carpeta que falta, puede agregarla -ErrorAction Ignore, aunque eso también ocultará otros errores.
Tor Klingberg,
2
@Kiquenet continuación, puede utilizar comodines para eliminar todo dentro de esa carpeta: Remove-Item './folder/*'. Si realmente desea borrar solo los archivos de todas las carpetas, puede enumerar todas las hojas y canalizarlas al cmdlet Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

De PowerShell remove force answer : help Remove-Item dice:

El parámetro Recurse en este cmdlet no funciona correctamente

El comando para solucionarlo es

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

Y luego elimine la carpeta en sí

Remove-Item $Destination -Force 
Michael Freidgeim
fuente
1
Si quiero eliminar solo el contenido de la carpeta pero no eliminar la carpeta?
Kiquenet
3
@ beppe9000: Creo que sí. En los guiones recientes que estoy usando Remove-Item -Recurse -Force $diry funciona.
Michael Freidgeim
Ok, pero acabo de leer que el problema es todavía aquí en las ventanas 10 extendida Get-Help Remove-Itemdocumentación obtenida después de Update-Helpque se ejecute ...
beppe9000
2
Get-ChildItem también debe tener el argumento -Force, para que también devuelva archivos / carpetas ocultos.
Vlad Iliescu
@MichaelFreidgeim: he usado esto y ha disminuido las fallas intermitentes, pero todavía ocurren ocasionalmente. Si Remove-Item -recurse es problemático para el directorio de nivel superior, ¿puede explicar por qué no sería igualmente problemático cuando se conecta con la línea de solución? Get-ChildItem -recurse no devuelve a los hijos en orden ascendente. ¿Remove-Item ordena su entrada canalizada?
aggieNick02
42

Esto funcionó para mí:

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

Por lo tanto, la carpeta se elimina con todos los archivos allí y no produce errores si la ruta de la carpeta no existe.

necrifede
fuente
Esto no elimina la carpeta.
variable
13

Actualización 2018

En la versión actual de PowerShell (probado con v5.1 en Windows 10 1809) se puede usar la sintaxis Unix más simple rm -R .\DirNamepara eliminar silenciosamente el directorio .\DirNamecon todos los subdirectorios y archivos que puede contener. De hecho, muchos comandos comunes de Unix funcionan de la misma manera en PowerShell que en una línea de comandos de Linux.

Divenex
fuente
También puede usar rm -R .\DirName\*para limpiar la carpeta sin eliminar la carpeta en sí misma
Jeff Chen
Ninguno de los comandos de PowerShell ni este funciona para mí en una computadora central de servidor 2016. Todos dicen, "no se puede eliminar porque no está vacío". También probé el comando rd en windows. Puedo mover la carpeta a cualquier parte, simplemente no puedo eliminarla.
Helzgate
10

Para eliminar contenido sin una carpeta, puede usar lo siguiente:

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

rm -Force -Recurse -Confirm:$false $directory2Deleteno funcionó en el ISE de PowerShell , pero funcionó a través de la CLI de PowerShell normal.

Espero que esto ayude. Me estaba volviendo loco.

Flightdeck73
fuente
¡Gracias, lo mismo va para mí! Finalmente, esta carpeta se eliminó al llamar desde PowerShell CLIy no durante el desarrollo PowerShell ISE.
Bruno Bieri
3

en resumen, podemos usar rm -r -fo {folderName}para eliminar la carpeta de forma recursiva (eliminar todos los archivos y carpetas del interior) y forzar

Salman
fuente
2

A continuación se muestra una implementación copiable y pegable de la respuesta 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
    }
}
usuario2426679
fuente
1

Como mi directorio estaba en C: \ users, tuve que ejecutar mi PowerShell como administrador,

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

Este comando funcionó para mí.

Omkar Agrawal
fuente
2
Solo como nota al margen: deles un alias para 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
fuente
En el script anterior, imprimo el nombre completo de la carpeta y lo elimino. \ o /
Anderson Braz
0

Si tiene su carpeta como un objeto, supongamos que la creó en el mismo script con el siguiente comando:

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

Luego puedes eliminarlo así en el mismo script

$folder.Delete($true)

$ true: estados para la eliminación recursiva

Dmitriy Reznikov
fuente
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
fuente
En el script anterior, imprimo el nombre completo de la carpeta y lo elimino. Un buen trabajo ...
Anderson Braz
1
Hola Anderson, deberías editar las respuestas si no planeas agregar 2 respuestas diferentes, ¿tal vez quieras eliminar una de ellas?
bummi
0

Esto funcionó para mí:

Remove-Item C:\folder_name -Force -Recurse
variable
fuente