使用 Powershell 复制和重命名前一天修改的文件
Copy and Rename Files Modified in Last Day Using Powershell
我正在尝试将文件从源文件夹复制到目标文件夹。我只想复制最近 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”进行比较。错误:"Cannot convert the "00:20:00" 类型值
"System.TimeSpan" 键入 "System.DateTime"。”
在 line:2 char:9
+ 如果 ($File.LastWriteTime -gt $timespan)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 类别信息:InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : ComparisonFailure
根据您粘贴的错误,Powershell 在将 System.TimeSpan 转换为 System.DateTime 类型时遇到问题。这是两个不同的对象,您必须先将一个对象转换为另一个对象才能协同工作。
您正在比较 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
行中是否存在错误。您可能希望在日期之前有一个美元符号和一个 space,但我猜这是不对的。
我正在尝试将文件从源文件夹复制到目标文件夹。我只想复制最近 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”进行比较。错误:"Cannot convert the "00:20:00" 类型值 "System.TimeSpan" 键入 "System.DateTime"。” 在 line:2 char:9 + 如果 ($File.LastWriteTime -gt $timespan) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 类别信息:InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : ComparisonFailure
根据您粘贴的错误,Powershell 在将 System.TimeSpan 转换为 System.DateTime 类型时遇到问题。这是两个不同的对象,您必须先将一个对象转换为另一个对象才能协同工作。
您正在比较 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
行中是否存在错误。您可能希望在日期之前有一个美元符号和一个 space,但我猜这是不对的。