我有文件不断地从 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))