PowerShell - перенос файлов старше н дней

Ответить
Аватара пользователя
firstarey

PowerShell - перенос файлов старше н дней

Сообщение firstarey »

суть:

имеется каталог с большим количеством файлов.

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

результат заархивировать.



не могу разобраться почему 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}
}
Аватара пользователя
Опиум

Re: PowerShell - перенос файлов старше н дней

Сообщение Опиум »

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



Код:

Код: Выделить всё

robocopy /MIR /MOV /MINAGE:n  "D:\test\ГКН" "D:\_BackUp\11\"
rar.exe a arc D:\_BackUp\11\*.*
Аватара пользователя
firstarey

Re: PowerShell - перенос файлов старше н дней

Сообщение firstarey »

Цитата Опиум:



robocopy /MIR /MOV /MINAGE:n "D:\test\ГКН" "D:\_BackUp\11\"

rar.exe a arc D:\_BackUp\11\*.*
PowerShell - перенос файлов старше н дней




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



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

Re: PowerShell - перенос файлов старше н дней

Сообщение Kazun »

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

Re: PowerShell - перенос файлов старше н дней

Сообщение Опиум »

firstarey,



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

Вернуться в «Скриптовые языки администрирования Windows»