Назад | Перейти на главную страницу

Необходимо удалить файлы (* .log. *) Из подкаталогов с таким же именем, разбросанных во многих корневых каталогах.

Мне нужно удалить журналы с расширением *.log.* выходит в подпапку с именем SessLogs, WorkflowLogs в корневом каталоге d:\software\Bil

Точно так же у меня есть папки SessLogs, WorkflowLogs во многих подкаталогах с разными именами, например Bil , как этого добиться. У меня есть образец сценария, созданный, как показано ниже, но для него требуется некоторое обновление.

Структура каталогов, например

Программное обеспечение -> Wel -> "SessLogs" и "WorkflowLogs"
Программное обеспечение -> Gim -> "SessLogs" и "WorkflowLogs"
Программное обеспечение -> Ren -> "SessLogs" и "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

Я не уверен, правильно ли я понимаю ваше требование, но если да, то оно у вас уже было. Что я изменил:

  • Когда используешь Get-Childitem с участием recurse вам не нужно добавлять звездочку (*) в конце пути поиска.
  • Поскольку вы ищете файлы, содержащие «.log.», Просто используйте его для параметра include, а не «*. *», Который будет искать все файлы с точкой.
  • вы также можете избавиться от (-not $_.PSIsContainer) если вы знаете, что ни одна из ваших папок не содержит строки «.log». - но вы можете оставить его себе на всякий случай.

Таким образом, это должно сделать следующее: получить все элементы из D: \ Software и всех его подпапок, которые содержат строку «.log». в имени, которые не являются каталогами, и которые были созданы 30 дней назад или ранее - затем удалите их.

$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