Necesita eliminar archivos (* .log. *) De subdirectorios que tienen el mismo nombre disperso en muchos directorios raíz

1

Necesito eliminar registros con *.log.* salidas de extensión en la subcarpeta llamada SessLogs, WorkflowLogsen el directorio raízd:\software\Bil

Del mismo modo, tengo las carpetas SessLogs, WorkflowLogsen muchos subdirectorios con nombre diferentes Bil, como lograr esto. Tengo un script de muestra creado como se muestra a continuación, pero necesita alguna actualización.

Estructura de directorio por ejemplo

Software -> Wel -> Software "" SessLogs "y" WorkflowLogs "
-> Gim -> Software" "SessLogs" y "WorkflowLogs"
-> Ren -> "" SessLogs "y" WorkflowLogs "

$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software*" -include "*.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif

prem
fuente
¿Desea eliminar todos los archivos que tienen registros de palabras, de cada subcarpeta llamada SessLogs o WorkFlowLogs en D: \ Software \ Bil? ¿Hay algún requisito en cuanto a la antigüedad del archivo o simplemente desea eliminar todo?
RobbieCrash
Hola Robbie, necesito eliminar archivos con extensiones * .log como 6 meses antes del directorio SessLogs y WorkFlowLogs que reside en muchos directorios raíz como Bil o Wel o Gim o Rin.
prem

Respuestas:

0

No estoy seguro si entiendo su requerimiento correctamente, pero si lo hago, ya lo tenía. Lo que cambié:

  • Cuando se usa Get-Childitemcon recurseusted, no necesita agregar el Asterisco (*) al final de la ruta de búsqueda.
  • Como está buscando archivos que contengan ".log.", Simplemente utilícelo para el parámetro de inclusión, no "*. *", Que buscaría todos los archivos con un punto.
  • también puede deshacerse de él (-not $_.PSIsContainer)si sabe que ninguna de sus carpetas contiene la cadena ".log". - pero puedes quedarte para estar seguro.

Por lo tanto, esto debería hacer lo siguiente: Obtener todos los elementos en D: \ Software y todas sus subcarpetas que contienen la cadena ".log". en el nombre, que no son directorios, y que se crearon hace 30 días o antes, luego bórrelos.

$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software" -include "*.log.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif
Tobias
fuente