Eu usei isso e não tenho erros. Não há CreationTime.Date.
Get-ChildItem \myfilepath |where {!$_.PSIsContainer -and ($_.CreationTime -lt (Get-Date).AddDays(-45))
Eu tenho arquivos que são constantemente baixados de um site ftp para um diretório.
Eles são todos nomeados neste formato: yyyyMMdd_file1.txt
20160612_file1.txt
20161225_file2.txt
Estou tentando mover arquivos com uma data de criação de 45 dias ou mais para sua própria pasta com base na data da base. Assim, quando o código é executado, ele deve pegar o 20160612_file1.txt
e criar e mover automaticamente o arquivo para uma pasta chamada 20160612
, mas não faça nada com o outro arquivo.
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
}
Não consigo fazer com que a comparação de datas funcione corretamente. Alguma idéia?
Um pouco mais de informação:
O script acima retorna um erro. Especificamente:
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
Parece que talvez eu não possa comparar os valores CreationTime.Date e (get-Date) .AddDays (-45).
TRABALHANDO ABAIXO
$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
}
Tags date powershell date-time