Функция поиска старых файлов
14 Январь 2010
Попросили у меня совета как можно найти в папке созданные 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 }
}
}
}
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 }
}
}
}

.gif)

Вообще проверять наличие параметров необязательно. Так как в объявлении функции не указаны значения по умолчинию – параметры будут считаться обязательными и без их указания функция работать не будет. Если же нужно сделать дополнительную обработку, например как тут – вывести справку, то я бы сделал так:
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 был бы уместнее.
@xaegr
А это чтоб было в кавычках, чтоб можно было потом скажем файлик скормить в cmd чему-то другому.