move o arquivo para a pasta com base na data de criação

1

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
}
    
por Narzard 03.01.2017 / 20:56

1 resposta

1

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))
    
por 04.01.2017 / 04:54