Войти

Показать полную графическую версию : перенос файлов старше н дней


firstarey
10-06-2015, 13:15
суть:
имеется каталог с большим количеством файлов.
нужно переместить в другое место с сохранением структуры каталога файлы старше н дней/месяцев/лет
результат заархивировать.

не могу разобраться почему 2-й вариант не отрабатывает.
может подскажет кто?

вариант 1 - рабочий:

$Months = 11
$path = "D:\test\ГКН"
$dest = "D:\_BackUp\11\"


Get-ChildItem -Path $path -recurse | where {
write-host "Move File: "$_.DirectoryName$_ -foregroundcolor "Yellow"
$_.LastWriteTime -le ((Get-Date).AddMonths(-$Months)) -and !$_.PsIsContainer
} | Move-Item -Destination {
md $_.DirectoryName.Replace("$path","$dest") -force
}


вариант 2 - НЕ рабочий:

Param (
#период в днях старше которого файл считается пригодным к удалению
[int]$Period = 100 ,
#каталог просмотра
[String]$PATH = "D:\test\ГКН" ,
#каталог назначения
[String]$DEST = "D:\_BackUp\11\" ,
#включать ли вложенные каталоги
[bool]$recurse = $true
)

filter Get-OldFiles {
if (([DateTime]::Now.Subtract($_.CreationTime)).Days -gt $Period) {
write-host "Move File: "$_ -foregroundcolor "Yellow"
return $_
}
}

if ($recurse) {
dir -path $PATH -recurse `
| Get-OldFiles -Period $Period `
| Move-Item -Destination {md $_.DirectoryName.Replace("$PATH","$DEST") -force}
} else {
dir -path $PATH `
| Get-OldFiles -Period $Period `
| Move-Item -Destination {md $_.DirectoryName.Replace("$PATH","$DEST") -force}
}

Опиум
10-06-2015, 13:58
я бы заюзал для такой задачи:
robocopy /MIR /MOV /MINAGE:n "D:\test\ГКН" "D:\_BackUp\11\"
rar.exe a arc D:\_BackUp\11\*.*

firstarey
10-06-2015, 14:18
robocopy /MIR /MOV /MINAGE:n "D:\test\ГКН" "D:\_BackUp\11\"
rar.exe a arc D:\_BackUp\11\*.* »

не понял, какой параметр отвечает за дату отбора файлов ?

robocopy конечно хорошо, но мне принципиально разобраться почему 2-й пример не желает работать

Kazun
10-06-2015, 14:31
Если данные тестовые, то может быть CreationTime(проверить, что дата подпадает под условие) не подпадать под условие и отсутствует фильтр на исключение папок !$_.PsIsContainer. Можно убрать -Period $Period , т.к. нет такого параметра у фильтра Get-OldFiles. В остальном проблем нет.

Опиум
10-06-2015, 14:45
firstarey,

/MINAGE:n -исключить из обработки файлы моложе n дней.




© OSzone.net 2001-2012