У меня есть файлы, которые постоянно извлекаются с FTP-сайта в каталог.
Все они названы в следующем формате: yyyyMMdd_file1.txt
20160612_file1.txt
20161225_file2.txt
Я пытаюсь переместить файлы с датой создания 45 дней и старше в свою папку на основе даты базового имени. Поэтому, когда код запускается, он должен взять 20160612_file1.txt
и автоматически создать и переместить файл в папку с именем 20160612
, но ничего не делать с другим файлом.
Get-ChildItem \\myfilepath | Where-Object {!$_.PSIsContainer -and $_.CreationTime.Date -lt (Get-Date).AddDays(-45)} | Foreach-Object{
$dest = Join-Path $_.DirectoryName $_.BaseName.Split('\_')[0]
if(!(Test-Path -Path $dest -PathType Container))
{
$null = md $dest
}
$_ | Move-Item -Destination $dest -Force
}
Я просто не могу заставить сравнение даты работать правильно. Какие-нибудь мысли?
Немного больше информации:
Сценарий выше возвращает ошибку. В частности:
PS C:\temp4> .\movefiles.ps1
At C:\temp4\movefiles.ps1:1 char:126
+ ... Object {!$_.PSIsContainer -and $_.CreationTime.AddDays(0) -lt Get-Dat ...
+ ~
You must provide a value expression following the '-lt' operator.
At C:\temp4\movefiles.ps1:1 char:127
+ ... ontainer -and $_.CreationTime.AddDays(0) -lt Get-Date.AddDays(-45)} | ...
+ ~~~~~~~~~~~~~~~~
Unexpected token 'Get-Date.AddDays' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : ExpectedValueExpression
Кажется, будто я не могу сравнить CreationTime.Дата и (получить-Дата).AddDays (-45) значения.
РАБОТАЙТЕ НИЖЕ
$archivedate = (Get-Date).AddDays(-45)
Get-ChildItem \\filepath | Where-Object {!$_.PSIsContainer -and ($_.LastWriteTime -lt $archivedate)} | Foreach-Object{
$dest = Join-Path $_.DirectoryName $_.BaseName.Split('_')[0]
if(!(Test-Path -Path $dest -PathType Container))
{
md $dest
}
$_ | Move-Item -Destination $dest -Force
}