iNNOKENTIY21
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: # Ротация файла. К имени файла создаваемой копии добавляется разделитель и цифра # Пока цифра меньше заданного числа копий, увеличивается цифра в имени # Когда цифра больше или равна заданному числу копий, заменяется самый ранний # файл с цифрой, по дате последней записи (LastWriteTime) param ( # Полное имя файла [Parameter(Mandatory)] [System.IO.FileInfo] $FullName, # Число копий [byte] $FilesCount = 5, # Разделитель имени и счётчика [char] $Delimeter = '-' ) # Составное имя из Пути, Базового имени, Разделителя, Номера и Расширения [scriptblock] $CombinedFullName = { Join-Path -Path $FullName.DirectoryName -ChildPath ( "{0}{1}{2}{3}" -f $FullName.BaseName, $Delimeter, $idx, $FullName.Extension ) } # Список файлов, где имя: Базовое имя, Разделитель, Цифры, Расширение [System.IO.FileInfo[]] $Files = Get-ChildItem -File -Path $FullName.Directory | Where-Object { $_.Name -Match "$($FullName.BaseName)$Delimeter\d+$($FullName.Extension)" } # Если число найденных файлов, меньше числа копий if ($Files.Count -lt $FilesCount) { # Номер в имени файла [byte] $idx = $Files.Count + 1 # Имя файла для копии [string] $NewFullName = & $CombinedFullName } # Если число найденных файлов, больше или равно числу копий if ($Files.Count -ge $FilesCount) { # Выбор самого раннего файла, по дате последней записи [string] $NewFullName = ($Files | Sort-Object LastWriteTime)[0].FullName } # Копирование файла Copy-Item -Path $FullName -Destination $NewFullName -Force |
|