根据创建日期将文件移动到文件夹

根据创建日期将文件移动到文件夹

我有文件不断地从 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.Date 和 (get-Date).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

我使用了这个,没有出现任何错误。没有 CreationTime.Date。

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

相关内容