1

У меня есть файлы, которые постоянно извлекаются с 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
}

1 ответ1

1

Я использовал это и не получил ошибок. Там нет CreationTime.Дата.

Get-ChildItem \\myfilepath |where {!$_.PSIsContainer -and ($_.CreationTime -lt  (Get-Date).AddDays(-45))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .