我正在尝试将文件从源文件夹复制到目标文件夹。我想只复制在过去20分钟内修改过的文件。在我复制时,我还想将日期和时间附加到文件名的末尾。我目前的脚本是:
$DestinationFolder = "C:\Output\"
$timespan = new-timespan -minutes 20
$Files = Get-ChildItem "C:\Input\*" -File
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $timespan)
{
Copy-Item -Path $_.FullName -Destination $DestinationFolder$($_.BaseName)_$ ($_.LastWriteTime.ToString('yyyyMMdd_hhmmss'))$($_.Extension)
}
}
当我尝试测试我的scipt时,我在powershell中收到错误消息:
无法将“07/21/2017 07:31:01”与“00:20:00”进行比较。错误:“无法转换类型的”00:20:00“值 “System.TimeSpan”键入“System.DateTime”。“ 在行:2 char:9 + if($ File.LastWriteTime -gt $ timespan) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:ComparisonFailure
答案 0 :(得分:5)
您正在将DateTime与TimeSpan进行比较。这没有意义。日期时间是一个时间点。时间跨度是持续时间。你需要比较两个日期。
尝试:
$DestinationFolder = "C:\Output\"
$Cutoff = (Get-Date).AddMinutes(-20)
Get-ChildItem "C:\Input\*" -File | Where-Object {
$_.LastWriteTime -gt $Cutoff
} | ForEach-Object {
$DestinationFileName = '{0}_{1:yyyyMMdd_HHmmss}{2}' -f $_.BaseName, $_.LastWriteTime, $_.Extension
$DestinationFullFileName = Join-Path -Path $DestinationFolder -ChildPath $DestinationFileName
Copy-Item -Path $_.FullName -Destination $DestinationFullFileName
}
我无法判断您Copy-Item
行中是否存在错误。在日期之前你可能想要一个美元符号和一个空格,但我猜这不对。
答案 1 :(得分:3)
根据您粘贴的错误,Powershell无法将System.TimeSpan转换为System.DateTime类型。这些是两个不同的对象,你必须在它们一起工作之前将它们投入另一个。