首页 > 解决方案 > 如何使用powershell确保以匹配日期复制最新的两个文件?

问题描述

我正在使用 Powershell 将两个文件复制到驱动器中。这些文件每天都会创建,但有时一个文件会更新而另一个文件不会。如何确保复制最新文件并且日期匹配。即如果文件 A 为 26.6.19 且文件 B 为 26.6.19 复制这两个。但是,如果文件 A 从 26.6.19 开始,而文件 b 从 25.6.19 开始,那么我将被要求使用从 25.6.19 开始的文件 A,反之亦然。

我尝试使用创建日期,但这是我的问题所在,因为日期可能不同

$bak_path = "文件路径" get-childitem -path $bak_path -Filter "文件 A*.csv_AABBCC" |

where-object { -not $_.PSIsContainer } | 

  Sort-Object $_.CreationTime |

select-object -last 1 | 


copy-item -Destination File Location

get-childitem -path $bak_path -Filter "文件 B*.csv_AABBCC" |

where-object { -not $_.PSIsContainer } | 

  Sort-Object $_.CreationTime |

select-object -last 1 |    

copy-item -Destination File Location

标签: excelpowershelldatematching

解决方案


格林威治标准时间 28/06/2019 上午 11 点编辑

好的,根据我们的转换记录,我尝试复制您的环境。

Get-ChildItem E:\test1 

Directory: E:\test1

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       27/06/2019     13:54          11170 PRM_cashExtract_20190627t10045.csv_ATF03305
-a----       27/06/2019     14:02          48682 PRM_cashExtract_20190627t10045.csv_ATF04251
-a----       27/06/2019     13:54          11170 PRM_cashExtract_20190628t10045.csv_ATF03305
-a----       27/06/2019     14:02          48682 PRM_cashExtract_20190628t10045.csv_ATF04251
-a----       27/06/2019     14:07          44582 PRM_posExtract_20190627t10045.csv_ATF04251
-a----       27/06/2019     14:07           1079 PRM_transExtract_20190627t10045.csv_ATF03305
-a----       27/06/2019     14:18        1587853 PRM_transExtract_20190627t10045.csv_ATF04251

然后,我根据命名约定和过去 24/47 小时内的创建日期运行了这些命令,只针对您要查找的两个文件

$date = ( Get-Date ).AddDays( -1 ).DayOfYear
$bak_path = Get-ChildItem FILEPATH | where { ( $_.Name -match "_ATF04251" ) -and ( $_.Name -notmatch "trans" ) } | Select Name, FullName, @{ n="CreationTime" ; e={ ( Get-Date $_.CreationTime ).DayOfYear } } | sort CreationTime

这给了我:

$bak_path
Name                                        FullName                                             CreationTime
----                                        --------                                             ------------
PRM_cashExtract_20190627t10045.csv_ATF04251 E:\test1\PRM_cashExtract_20190627t10045.csv_ATF04251          178
PRM_posExtract_20190627t10045.csv_ATF04251  E:\test1\PRM_posExtract_20190627t10045.csv_ATF04251           178
PRM_cashExtract_20190628t10045.csv_ATF04251 E:\test1\PRM_cashExtract_20190628t10045.csv_ATF04251          179

所以它拾取了三个文件,两个来自昨天,一个来自今天。

这里的最后一行按创建日期对文件进行分组,如果文件数为两个或更多,它会将它们复制到您的目的地。

$bak_path | Group-Object { $_.CreationTime } | where { ( $_.Count -ge 2 ) -and ( $_.Group.CreationTime -ge $date ) } | foreach { Copy-Item $_.Group.FullName -Destination DESTINATION }

推荐阅读