Estoy tratando de eliminar archivos en un conjunto específico de carpetas con PowerShell. Mi código actualmente se ve así:

$tempfolders = @(
    "C:\Windows\Temp\*"
    "C:\Documents and Settings\*\Local Settings\temp\*"
    "C:\Users\*\Appdata\Local\Temp\*"
    )

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

Quiero agregar una nueva carpeta a esa lista, con la siguiente fórmula:

"C:\users\*\AppData\Local\Program\**\Subfolder"

Donde ** podría ser varias subcarpetas de longitud desconocida. Por ejemplo, podría ser settings\subsettings o podría ser folder\settings\subsettings. ¿Hay alguna forma de hacer esto?

2
Randy 16 oct. 2018 a las 16:59

2 respuestas

La mejor respuesta

Puede alimentar la ruta completa de cada archivo a una expresión regular; esto devolverá solo los archivos que coinciden con su formato, que luego puede canalizar a Remove-Item:

ls "C:\Users" -Recurse -Hidden | Where-Object { $_.FullName -imatch '^C:\\users\\([^\\]+)\\AppData\\Local\\Program\\(.*)\\Subfolder' }

Debido a que las expresiones regulares se consideran de solo escritura, una pequeña explicación:

  • las barras diagonales inversas cuentan como caracteres de escape dentro de una expresión regular y deben duplicarse.
  • ([^\\]+) significa uno o más de cualquier carácter excepto una barra invertida
  • .* significa cero o más de cualquier carácter
2
Randy 18 oct. 2018 a las 14:42

Puedes usar Get-ChildItem -Directory -Recurse, Esto hará exactamente lo que está pidiendo. Canalícelo desde la matriz a Remove-Item

@("C:\Windows\Temp\*", "C:\Documents and Settings\*\Local Settings\temp\*", "C:\Users\*\Appdata\Local\Temp\*") | 
    Get-ChildItem -Directory -Recurse -Force -ErrorAction SilentlyContinue | 
    Remove-Item -Recurse -Force -ErrorAction SilentlyContinue

Solo para un aviso en Powershell Piping | es clave. PowerShell nos encanta encadenar comandos.

0
Clijsters 16 oct. 2018 a las 14:18