Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   перенос файлов старше н дней (http://forum.oszone.net/showthread.php?t=301007)

firstarey 10-06-2015 13:15 2516991

перенос файлов старше н дней
 
суть:
имеется каталог с большим количеством файлов.
нужно переместить в другое место с сохранением структуры каталога файлы старше н дней/месяцев/лет
результат заархивировать.

не могу разобраться почему 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 2517006

я бы заюзал для такой задачи:
Код:

robocopy /MIR /MOV /MINAGE:n  "D:\test\ГКН" "D:\_BackUp\11\"
rar.exe a arc D:\_BackUp\11\*.*


firstarey 10-06-2015 14:18 2517013

Цитата:

Цитата Опиум
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 2517023

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

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

firstarey,

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


Время: 21:05.

Время: 21:05.
© OSzone.net 2001-