¿Cómo eliminar de forma recursiva un directorio completo con PowerShell 2.0?

361

¿Cuál es la forma más sencilla de eliminar forzosamente un directorio y todos sus subdirectorios en PowerShell? Estoy usando PowerShell V2 en Windows 7.

He aprendido de varias fuentes que el comando más obvio Remove-Item $targetDir -Recurse -Force, no funciona correctamente. Esto incluye una declaración en la ayuda en línea de PowerShell V2 (que se encuentra usando Get-Help Remove-Item -Examples) que dice:

...Because the Recurse parameter in this cmdlet is faulty, the command uses the Get-Childitem cmdlet to get the desired files, and it uses the pipeline operator to pass them to the Remove-Item cmdlet...

He visto varios ejemplos que usan Get-ChildItem y lo canalizan a Remove-Item , pero los ejemplos generalmente eliminan algunos conjuntos de archivos basados ​​en un filtro, no en todo el directorio.

Estoy buscando la forma más limpia de explotar un directorio completo, archivos y directorios secundarios, sin generar ningún mensaje de advertencia para el usuario utilizando la menor cantidad de código. Sería bueno usar una sola línea si es fácil de entender.

7
623
Remove-Item -Recurse -Force some_dir

de hecho funciona como se anuncia aquí.

rm -r -fo some_dir

son alias abreviados que también funcionan.

Por lo que entendí, el -Recurseparámetro simplemente no funciona correctamente cuando intentas eliminar un conjunto filtrado de archivos de forma recursiva. Para matar un solo directorio y todo lo que está debajo, parece funcionar bien.

14
  • 7
    Creo que es correcto. Recibía el mensaje "No se puede eliminar el elemento en 'algún directorio' porque está en uso". error y asumió que era un problema con el algoritmo de recursividad y busqué una solución. Resulta que tuve un proceso que activé anteriormente en el script que estaba funcionando en el directorio de destino. Cuando se cambia la secuencia de comandos para esperar al otro proceso, el comando "Eliminar-Elemento -Recurrir -Fuerza" funciona. Mírate siempre en el espejo primero :)Matt Spradley 18 de nov. De 2009 a las 3:57
  • 18
    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 2 dic '11 a las 20:03
  • 5
    Kristopher Johnson, obtengo errores similares con diferentes herramientas en Windows 7. Parece que la llamada de eliminación regresa antes de que se elimine un archivo o carpeta, lo que a veces causa problemas. Esto parece suceder en Explorer, Far, cmd y PowerShell. Joey 17/07/12 a las 10:32
  • 2
    @Joey "Parece que la llamada de eliminación regresa antes de que se elimine un archivo o carpeta, lo que a veces causa problemas". -> Para aclarar: la carpeta principal no se eliminará y se obtiene el siguiente error: "[carpeta principal] no se puede eliminar porque no está vacía". Veo que esto sucede constantemente en unidades (lentas) en red. La única solución es la anterior: cmd /c rdcomo se indica a continuación. Davor Josipovic 3 abr 13 a las 9:48
  • 7
    ¿Qué pasa con los errores "El directorio no está vacío"? serverfault.com/questions/199921/powershell-remove-force Quizás sea mejor get-childitem * -include * .csv -recurse | remove-item no lo sé. Ver stackoverflow.com/a/1668471/206730Kiquenet 30 de abril de 2013 a las 6:48
43

Solía:

rm -r folderToDelete

Esto me funciona a las mil maravillas (lo robé de Ubuntu).

6
  • ¿No requiere cygwin, git o alguna otra herramienta que pueda simular un shell bash en Windows? Pete 12/11/2014 a las 8:51
  • 21
    @Pete, no, no requiere nada más que PowerShell. rmes un alias para Remove-Itemen la configuración predeterminada de PowerShell. Consulte la salida de Get-Alias rmpara obtener más detalles. El -restá tomando ventaja de comportamiento coincidencia parcial de PowerShell en parámetros. Dado que Remove-Itemsolo tiene el parámetro que comienza con una 'r' -Recurse, -rcoincide con eso. Por lo tanto, la siguiente todo funcionará de la misma: rm -r, rm -re, Remove-Item -Recurse. (Tenga en cuenta que ni rm -rfni rm -r -ffuncionará, pero rm -r -fono -rfcoincide con ningún parámetro y -fcoincide con más de uno)chwarr 19/11/2014 a las 18:40
  • 1
    Qué hay sobre eso. El alias rm de Powershell para "Remove-Item -Recurse -Force some_dir" funciona mejor que usar directamente remove-item. Recibí los mismos errores "No se puede eliminar el elemento en 'algún directorio'. ¡Cambié de remove-item a rm -r sin errores !?Greg 21/03/15 a las 22:31
  • 2
    Tal vez sea porque uso el en -Rlugar de -r(aunque hasta donde yo sé, PowerShell es como el resto de Windows no distingue entre mayúsculas y minúsculas, por lo que no debería hacer una diferencia) pero recibí un error de que las carpetas que estoy tratando de eliminar son no vacío. rbaleksandar 17 de enero de 2017 a las 12:33
  • 1
    No funciona en PowerShell 5.1, tuve que usar rm -r -fo( rm -r -ftampoco funciona ya que el -fparámetro es ambiguo ya que puede coincidir con -Forcey -Filter). Maggyero 17/11/2017 a las 14:27
30

Al eliminar archivos de forma recursiva con un simple Remove-Item "folder" -Recurse, a veces veo un error intermitente:[folder] cannot be removed because it is not empty.

Esta respuesta intenta evitar ese error eliminando los archivos individualmente.

function Get-Tree($Path,$Include='*') { 
    @(Get-Item $Path -Include $Include -Force) + 
        (Get-ChildItem $Path -Recurse -Include $Include -Force) | 
        sort pspath -Descending -unique
} 

function Remove-Tree($Path,$Include='*') { 
    Get-Tree $Path $Include | Remove-Item -force -recurse
} 

Remove-Tree some_dir

Un detalle importante es la ordenación de todos los elementos pspath -Descendingpara que las hojas se eliminen antes que las raíces. La clasificación se realiza en el pspathparámetro, ya que tiene más posibilidades de funcionar para proveedores distintos al sistema de archivos. El -Includeparámetro es solo una comodidad si desea filtrar los elementos que desea eliminar.

Está dividido en dos funciones, ya que me resulta útil ver lo que estoy a punto de eliminar ejecutando

Get-Tree some_dir | select fullname
6
  • 2
    Al resolver un problema al usar PowerShell en los scripts de compilación de TFS, esta resultó ser la respuesta correcta. rcabr 25 de julio de 2014 a las 17:08
  • Esta es la solución también para mí. ¡Ten algunos puntos mi buen hombre! Jammer 25 de enero de 2016 a las 16:10
  • Trabajó para mi. No pude obtener la eliminación recursiva del contenido de una carpeta, pero su solución funcionó para mí. graciassheldonhull 26/04/2016 a las 19:39
  • Esta es una solución muy robustaMax Young 5/10/2017 a las 15:36
  • 1
    No estoy seguro de por qué la respuesta aceptada tiene tantos votos; personalmente, todavía obtengo errores intermitentes al usar remove-item -recursePowershell v5, por lo que esta solución es la mejor para mí. JonoB 25 feb 2019 a las 10:35
15
rm -r ./folder -Force    

...trabajó para mi

11

Prueba este ejemplo. Si el directorio no existe, no se genera ningún error. Es posible que necesite PowerShell v3.0.

remove-item -path "c:\Test Temp\Test Folder" -Force -Recurse -ErrorAction SilentlyContinue
8

Utilice el comando DOS de la vieja escuela:

rd /s <dir>
1
  • 1
    Si esto es parte de un script, también tendrá que usar /q(modo silencioso, no pregunte si está bien eliminar un árbol de directorios con / S). wildeyes 11 de enero de 2016 a las 9:57
6

Por alguna razón, la respuesta de John Rees a veces no funcionó en mi caso. Pero me llevó en la siguiente dirección. Primero trato de eliminar el directorio de forma recursiva con la opción buggy -recurse. Luego, bajo a cada subdirectorio que queda y elimino todos los archivos.

function Remove-Tree($Path)
{ 
    Remove-Item $Path -force -Recurse -ErrorAction silentlycontinue

    if (Test-Path "$Path\" -ErrorAction silentlycontinue)
    {
        $folders = Get-ChildItem -Path $Path –Directory -Force
        ForEach ($folder in $folders)
        {
            Remove-Tree $folder.FullName
        }

        $files = Get-ChildItem -Path $Path -File -Force

        ForEach ($file in $files)
        {
            Remove-Item $file.FullName -force
        }

        if (Test-Path "$Path\" -ErrorAction silentlycontinue)
        {
            Remove-Item $Path -force
        }
    }
}
2
  • ¿Puedes reproducir el error al ejecutar mis funciones? Me gustaría saber para poder mejorarlos. John Rees 26/01/2016 a las 22:51
  • Lo siento, no recuerdo la configuración exacta. : / Creo que fue cuando hubo varios subdirectorios involucrados. Sucedió que la llamada a "Remove-Item -force -recurse" no borró todos los archivos y en ese caso el último Remove-Tree falló porque el directorio no estaba vacío. Es por eso que se me ocurrió la nueva solución para probar primero la versión incorporada con errores (-force) y luego descender manualmente a cada directorio y eliminar "manualmente" lo que queda. Esta versión se usa regularmente y hasta ahora está funcionando. La única causa por la que falló fue cuando un programa todavía tiene un identificador para un directorio. jdoose 28 de enero de 2016 a las 7:08
5

Para evitar los errores "El directorio no está vacío" de la respuesta aceptada, simplemente use el viejo comando de DOS como se sugirió anteriormente. La sintaxis completa de PS lista para copiar y pegar es:

& cmd.exe /c rd /S /Q $folderToDelete
1
  • 3
    ¿Todavía da el error "El directorio no está vacío" para las carpetas? Oncel Umut TURER 28 de septiembre de 2017 a las 18:35
3
del <dir> -Recurse -Force # I prefer this, short & sweet

O

remove-item <dir> -Recurse -Force

Si tiene un directorio enorme, lo que suelo hacer es

while (dir | where name -match <dir>) {write-host deleting; sleep -s 3}

Ejecute esto en otra terminal de PowerShell y se detendrá cuando termine.

2
  • Admito que su idea con el monitoreo puede ser útil, pero es apenas diferente de simplemente imprimir un mensaje una vez que está terminado, y en caso de que haya algún problema para detener el Eliminar-Elemento, su ciclo nunca terminará. Raúl Salinas-Monteagudo 8 de mayo de 2019 a las 6:56
  • @ RaúlSalinas-Monteagudo es cierto, pero definitivamente es para un escenario de caso de uso desatendido o provocado. Tiene que ser lo suficientemente pequeño para que alguien lo recuerde y escriba sobre la marcha y no para ejecutar un archivo .ps1 sofisticado en un directorio. Gajendra D Ambi 9 de mayo de 2019 a las 7:11
3

Eliminar un árbol de carpetas completo a veces funciona y, a veces, falla con errores de "Directorio no vacío". Posteriormente, intentar verificar si la carpeta aún existe puede resultar en errores de "Acceso denegado" o "Acceso no autorizado". No sé por qué sucede esto, aunque se puede obtener alguna información de esta publicación de StackOverflow .

He podido solucionar estos problemas especificando el orden en el que se eliminan los elementos dentro de la carpeta y agregando retrasos. Lo siguiente funciona bien para mí:

# First remove any files in the folder tree
Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Where-Object { -not ($_.psiscontainer) } | Remove-Item –Force

# Then remove any sub-folders (deepest ones first).    The -Recurse switch may be needed despite the deepest items being deleted first.
ForEach ($Subfolder in Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Select-Object FullName, @{Name="Depth";Expression={($_.FullName -split "\\").Count}} | Sort-Object -Property @{Expression="Depth";Descending=$true}) { Remove-Item -LiteralPath $Subfolder.FullName -Recurse -Force }

# Then remove the folder itself.  The -Recurse switch is sometimes needed despite the previous statements.
Remove-Item -LiteralPath $FolderToDelete -Recurse -Force

# Finally, give Windows some time to finish deleting the folder (try not to hurl)
Start-Sleep -Seconds 4

Un artículo de Microsoft TechNet sobre el uso de propiedades calculadas en PowerShell me resultó útil para obtener una lista de subcarpetas ordenadas por profundidad.

Los problemas de confiabilidad similares con RD / S / Q se pueden resolver ejecutando DEL / F / S / Q antes de RD / S / Q y ejecutando el RD por segunda vez si es necesario, idealmente con una pausa en el medio (es decir, usando ping como se muestra debajo).

DEL /F /S /Q "C:\Some\Folder\to\Delete\*.*" > nul
RD /S /Q "C:\Some\Folder\to\Delete" > nul
if exist "C:\Some\Folder\to\Delete"  ping -4 -n 4 127.0.0.1 > nul
if exist "C:\Some\Folder\to\Delete"  RD /S /Q "C:\Some\Folder\to\Delete" > nul
1
  • Vea esta respuesta , que David Faivre mencionó en su respuesta a continuación, para obtener una explicación de por qué la eliminación de directorios a veces falla, y un remedio más sofisticado. MikeOnline 7 de abril a las 20:53
2

Otro truco útil:

Si encuentra muchos archivos con la misma convención de nombre o similar (como el archivo mac con el nombre de prefijo de punto ... ese famoso archivo de extracción), puede eliminarlos fácilmente con una sola línea de PowerShell de esta manera:

ls -r .* | rm

Esta línea eliminará todos los archivos con un punto al principio del nombre dentro del directorio actual, y todos los archivos con las mismas circunstancias dentro de otras carpetas dentro de este directorio también. Tenga en cuenta esto cuando lo use. :D

3
  • ¿Por qué no usarlo rm -rf .*? No tengo PowerShell para probar, pero creo que funcionará. Vini.g.fer 8 de mayo de 2016 a las 0:07
  • 1
    Es fácil; si simplemente elimina el "| rm" del comando, puede ver un panorama completo de lo que va a eliminar, después de estar seguro, puede completar el comando. Daniel Alberto Lepe Ayala 23 de mayo de 2016 a las 19:43
  • Por cierto, para quitar los archivos que empiecen con punto, (como los de mac) pero que tengan propiedad de oculto, puedes usar: ls -r -h .* | rm – Daniel Alberto Lepe Ayala 10/08/2016 a las 22:17
2

Tomé otro enfoque inspirado por @ john-rees arriba, especialmente cuando su enfoque comenzó a fallarme en algún momento. Básicamente, repita el subárbol y clasifique los archivos por su longitud de ruta: elimínelos del más largo al más corto

Get-ChildItem $tfsLocalPath -Recurse |  #Find all children
    Select-Object FullName,@{Name='PathLength';Expression={($_.FullName.Length)}} |  #Calculate the length of their path
    Sort-Object PathLength -Descending | #sort by path length descending
    %{ Get-Item -LiteralPath $_.FullName } | 
    Remove-Item -Force

Con respecto a la magia de -LiteralPath, aquí hay otra gotchya que puede estar golpeando: https://superuser.com/q/212808

1

Realmente simple:

remove-item -path <type in file or directory name>, press Enter
1
  • También debería ofrecer una ejecución de ejemplo. indivisible 7 de mayo de 2014 a las 16:29
1

Para eliminar el contenido completo, incluida la estructura de carpetas, utilice

get-childitem $dest -recurse | foreach ($_) {remove-item $_.fullname -recurse}

El -recurseagregado remove-itemasegura que las indicaciones interactivas estén deshabilitadas.

1

Parece haber problemas en los que Remove-Item -Force -Recursepueden fallar intermitentemente en Windows porque el sistema de archivos subyacente es asíncrono. Esta respuesta parece abordarlo. El usuario también ha estado involucrado activamente con el equipo de Powershell en GitHub .

0

Si está comprometido con PowerShell, puede usar esto, como se explica en la respuesta aceptada:

rm -r -fo targetDir

Pero descubrí que es más rápido usar el símbolo del sistema de Windows

rmdir /s/q targetDir

Además de ser más rápido, otra ventaja de usar la opción del símbolo del sistema es que comienza a eliminar archivos de inmediato (PowerShell hace una enumeración primero), por lo que si algo se rompe mientras se está ejecutando, al menos ha progresado en la eliminación de archivos.

0

Sobre la base de @ John Rees 's respuesta con algunas mejoras.

Árbol de archivos iniciales . /F

C:\USERS\MEGAM\ONEDRIVE\ESCRITORIO\PWSHCFX
│   X-Update-PowerShellCoreFxs.ps1
│   z
│   Z-Config.json
│   Z-CoreFxs.ps1
│
├───HappyBirthday Unicorn
│       collection-of-unicorns-and-hearts-with-rainbows.zip
│       hand-drawing-rainbow-design.zip
│       hand-drawn-unicorn-birthday-invitation-template (2).zip
│       hontana.zip
│       Unicorn - Original.pdf
│       Unicorn-free-printable-cake-toppers.png
│       Unicorn.pdf
│       Unicorn.png
│       Unicorn2.pdf
│       Unicorn3.pdf
│       Unicorn4.pdf
│       Unicorn5.pdf
│       UnicornMLP.pdf
│
├───x
└───y

Código

function Get-ItemTree() {
    param (
        [Parameter()]
        [System.String]
        $Path = ".",

        [Parameter()]
        [System.String]
        $Include = "*",

        [Parameter()]
        [switch]
        $IncludePath,

        [Parameter()]
        [switch]
        $Force

    )
    $result = @()
    if (!(Test-Path $Path)) {
        throw "Invalid path. The path `"$Path`" doesn't exist." #Test if path is valid.
    }
    if (Test-Path $Path -PathType Container)
    {
        $result += (Get-ChildItem "$Path" -Include "$Include" -Force:$Force -Recurse) # Add all items inside of a container, if path is a container.
    }
    if($IncludePath.IsPresent)
    {
        $result += @(Get-Item $Path -Force) # Add the $Path in the result.
    }
    $result = ,@($result | Sort-Object -Descending -Unique -Property "PSPath") # Sort elements by PSPath property, order in descending, remove duplicates with unique.
    return  $result
}

function Remove-ItemTree {
    param (
        [Parameter()]
        [System.String]
        $Path, 

        [Parameter()]
        [switch]
        $ForceDebug
    )
    (Get-ItemTree -Path $Path -Force -IncludePath) | ForEach-Object{
        Remove-Item "$($_.PSPath)" -Force
        if($PSBoundParameters.Debug.IsPresent)
        {
            Write-Debug -Message "Deleted: $($_.PSPath)" -Debug:$ForceDebug
        }
    }
}

Write-Host "███ Test 1"
$a = Get-ItemTree "./Z-Config.json" -Force -Include "*" -IncludePath:$true # Tree of a file path. 1 element the file (IncludePath parameter = $true)
$a | Select-Object -ExpandProperty PSPath | ConvertTo-Json
Write-Host

Write-Host "███ Test 2"
$b = Get-ItemTree "./Z-Config.json" -Force -Include "*" -IncludePath:$false # Tree of a file path. No Result (IncludePath parameter = $false)
$b | Select-Object -ExpandProperty PSPath | ConvertTo-Json
Write-Host

Write-Host "███ Test 3"
$c = Get-ItemTree "." -Force -Include "*" -IncludePath:$true # Tree of a container path. All elements of tree and the container included (IncludePath parameter = $true).
$c | Select-Object -ExpandProperty PSPath | ConvertTo-Json
Write-Host

Write-Host "███ Test 4"
$d = Get-ItemTree "." -Force -Include "*" -IncludePath:$false # All elements of tree, except the container (IncludePath parameter = $false).
$d | Select-Object -ExpandProperty PSPath | ConvertTo-Json
Write-Host

Remove-ItemTree -Path "./HappyBirthday Unicorn" -Debug -ForceDebug #Remove the contents of container and remove the container. -Debug Prints debug messages and -ForceDebug forces to prints messages if DebugPreference is SilentlyContinue.
Remove-ItemTree -Path "./x" -Debug -ForceDebug #Remove the contents of container and remove the container. -Debug Prints debug messages and -ForceDebug forces to prints messages if DebugPreference is SilentlyContinue.
Remove-ItemTree -Path "./y" -Debug -ForceDebug #Remove the contents of container and remove the container. -Debug Prints debug messages and -ForceDebug forces to prints messages if DebugPreference is SilentlyContinue.
Remove-ItemTree -Path "./z" -Debug -ForceDebug #Remove file. -Debug Prints debug messages and -ForceDebug forces to prints messages if DebugPreference is SilentlyContinue.

Get-ChildItem -Force

Producción

███ Test 1
"Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\Z-Config.json"

███ Test 2

███ Test 3
[
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\Z-CoreFxs.ps1",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\Z-Config.json",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\z",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\y",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\X-Update-PowerShellCoreFxs.ps1",       
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\x",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\UnicornMLP.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn5.pdf",  
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn4.pdf",  
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn3.pdf",  
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn2.pdf",  
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn.png",   
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn.pdf",   
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn-free-printable-cake-toppers.png",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn - Original.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hontana.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hand-drawn-unicorn-birthday-invitation-template (2).zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hand-drawing-rainbow-design.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\collection-of-unicorns-and-hearts-with-rainbows.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx"
]

███ Test 4
[
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\Z-CoreFxs.ps1",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\Z-Config.json",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\z",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\y",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\X-Update-PowerShellCoreFxs.ps1",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\x",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\UnicornMLP.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn5.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn4.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn3.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn2.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn.png",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn-free-printable-cake-toppers.png",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\Unicorn - Original.pdf",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hontana.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hand-drawn-unicorn-birthday-invitation-template (2).zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\hand-drawing-rainbow-design.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn\\collection-of-unicorns-and-hearts-with-rainbows.zip",
  "Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Megam\\OneDrive\\Escritorio\\pwshcfx\\HappyBirthday Unicorn"
]

DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\UnicornMLP.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn5.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn4.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn3.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn2.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn.png
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn-free-printable-cake-toppers.png
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\Unicorn - Original.pdf
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\hontana.zip
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\hand-drawn-unicorn-birthday-invitation-template (2).zip
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\hand-drawing-rainbow-design.zip
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn\collection-of-unicorns-and-hearts-with-rainbows.zip
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\HappyBirthday Unicorn
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\x
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\y
DEBUG: Deleted: Microsoft.PowerShell.Core\FileSystem::C:\Users\Megam\OneDrive\Escritorio\pwshcfx\z


    Directory: C:\Users\Megam\OneDrive\Escritorio\pwshcfx

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
la---           17/5/2021     1:57            272 X-Update-PowerShellCoreFxs.ps1
la---           14/5/2021    18:51            252 Z-Config.json
la---           17/5/2021     4:04          30931 Z-CoreFxs.ps1

árbol . /F

C:\USERS\MEGAM\ONEDRIVE\ESCRITORIO\PWSHCFX
    X-Update-PowerShellCoreFxs.ps1
    Z-Config.json
    Z-CoreFxs.ps1

No subfolders exist
-1
$users = get-childitem \\ServerName\c$\users\ | select -ExpandProperty name

foreach ($user in $users)

{
remove-item -path "\\Servername\c$\Users\$user\AppData\Local\Microsoft\Office365\PowerShell\*" -Force -Recurse
Write-Warning "$user Cleaned"
}

¡Escribió lo anterior para limpiar algunos archivos de registro sin eliminar el directorio principal y esto funciona perfectamente!

-2
rm -r <folder_name>
c:\>rm -r "my photos"
1
  • 1
    Por favor, explique eso para que otros puedan aprender de su respuestaNico Haase 24 feb 2019 a las 15:40