Главная > Программирование, Саморазвитие > Функция поиска старых файлов

Функция поиска старых файлов

Попросили у меня совета как можно найти в папке созданные 10 дней назад файлы и удалить их. Подумав у меня родилась вот такая простенькая функция:

Function Search-OldFiles  {
    param ($day,$path,[switch]$search)

    $help = @"
`n
`t Надо использовать следующий синтаксис функции:
`t -day - задаем кол-во дней
`t -path - указываем путь
`t -search - указываем, что необходимо только найти файлы (по умолчанию они удаляются)
`t------------------------------------------------------------------------------------
`t Пример:
`t Search-OldFiles -day 2 -path 'D:\Games' -search
"
@
#--- проверяем существование параметров функции
    if (!($day) -or !($path) ) {write-warning $help; return}
#--- рукурсивно просматриваем папки и выбираем файлы 
    foreach ($item in Get-ChildItem -LiteralPath $path -Recurse -Force | Where-Object {!$_.PSIsContainer}) {
#--- сравниваем дату создания файла
        if ((Get-Date).adddays(-$day) -ge $item.CreationTime)  {
#--- в зависимости от ключа search просто ищем или удаляем      
            if ($search) { '"' + $item.fullname + '"' }
            else { $item.fullname | Remove-Item -Force -WhatIf }
        }
    }
}
  1. 14 Январь 2010 в 12:51 | #1

    Вообще проверять наличие параметров необязательно. Так как в объявлении функции не указаны значения по умолчинию – параметры будут считаться обязательными и без их указания функция работать не будет. Если же нужно сделать дополнительную обработку, например как тут – вывести справку, то я бы сделал так:
    param ($day={write-host $help; return},$path={write-host $help; return},[switch]$search={write-host $help; return})
    То есть значением по умолчанию является скриптблок, который выполняется в случае если параметр не указан.

    if ($search) { ‘»‘ + $item.fullname + ‘»‘ }
    Странная строка – если надо выдать файлы, то стоило использовать просто $item. Если же надо просто наглядно показать fullname файлов на экране, то write-host был бы уместнее.

  2. abigor
    14 Январь 2010 в 17:17 | #2

    @xaegr

    { '"' + $item.fullname + '"' }

    А это чтоб было в кавычках, чтоб можно было потом скажем файлик скормить в cmd чему-то другому.

  1. Пока что нет уведомлений.