使用Powershell复制和重命名在最后一天修改的文件

使用Powershell复制和重命名在最后一天修改的文件,powershell,copy-item,rename-item-cmdlet,Powershell,Copy Item,Rename Item Cmdlet,我正在尝试将文件从源文件夹复制到目标文件夹。我只想复制过去20分钟内修改过的文件。在复制时,我还希望在文件名的末尾附加日期和时间。我目前拥有的脚本是: $DestinationFolder = "C:\Output\" $timespan = new-timespan -minutes 20 $Files = Get-ChildItem "C:\Input\*" -File foreach ($File in $Files) { if ($File.LastWriteTime -gt $

我正在尝试将文件从源文件夹复制到目标文件夹。我只想复制过去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中收到错误消息:

无法将2017年7月21日07:31:01与00:20:00进行比较。错误:无法转换类型的00:20:00值 System.TimeSpan以键入System.DateTime。 第2行字符:9 +如果$File.LastWriteTime-gt$timespan + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidOperation::[],运行时异常
+FullyQualifiedErrorId:ComparisonFailure根据粘贴的错误,Powershell在将System.TimeSpan转换为System.DateTime类型时遇到问题。这是两个不同的对象,您必须先将一个对象转换为另一个对象,然后才能一起工作。

根据粘贴的错误,Powershell无法将System.TimeSpan转换为System.DateTime类型。这是两个不同的对象,在它们一起工作之前,您必须将一个对象转换为另一个对象。

您正在比较DateTime和TimeSpan。那没有道理。日期时间是一个时间点。时间跨度是一个持续时间。你需要比较两个日期

尝试:


我不知道你的复制品行是否有bug。在日期之前,您可能需要一个美元符号和一个空格,但我猜这是不对的。

您将日期时间与时间跨度进行比较。那没有道理。日期时间是一个时间点。时间跨度是一个持续时间。你需要比较两个日期

尝试:


我不知道你的复制品行是否有bug。在日期之前,您可能需要一个美元符号和一个空格,但我猜这是不对的。

您遇到了哪些错误?PowerShell中的错误消息通常提供大量信息,包括错误内容和错误位置。如果您在问题中包含错误信息,将更容易为您提供帮助。您会遇到哪些错误?PowerShell中的错误消息通常提供大量信息,包括错误内容和错误位置。如果您在问题中包含错误消息,将更容易为您提供帮助。@user6391187我还将datetime格式更正为使用24小时时间HH。您现有的格式仅使用12小时时间hh,这可能会导致混淆。@user6391187我还将日期时间格式更正为使用24小时时间hh。您现有的格式只使用了12小时的时间hh,这可能会导致混乱。
$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
}