Потрібно видалити файли (* .log. *) З підкаталогів, який має те саме ім’я, розпорошене у багатьох кореневих каталогах


1

Мені потрібно видалити журнали з розширенням *.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

Ви хочете видалити кожен файл, який містить у собі журнали слова, із кожної підпапки під назвою SessLogs або WorkFlowLogs під D: \ Software \ Bil? Чи є якісь вимоги щодо віку файлу, або ви просто хочете все видалити?
RobbieCrash

Привіт Роббі, Вам потрібно видалити файли з розширеннями * .log, як 6 місяців тому, з каталогу SessLogs та WorkFlowLogs, який знаходиться в багатьох кореневих каталогах, таких як Біл, Вел, Гім або Рін.
прем.

Відповіді:


0

Я не впевнений, чи правильно я розумію вашу вимогу, але якщо я це зробив, ви її вже мали. Що я змінив:

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

Отже, слід зробити наступне: Отримайте всі елементи під D: \ Програмне забезпечення та всі його підпапки, що містять рядок ".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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.