excel - 如何使用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
解决方案
格林威治标准时间 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 }
推荐阅读
- amazon-web-services - 将 Amazon WorkMail 与其他电子邮件提供商连接
- mysql - 带有 BLOB 列的 MySQL 5.7 批量插入
- mysql - MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误
- arrays - 如何将服务响应中的某些值存储到Angular 6中的数组?
- json - 无法在 Pug 文件中使用 Imigx 参数将字符串分配为 JSON 输入
- android - com.google.android.gms.common.api.ApiException:12500
- c - 如何将字符串数组传递给C中的函数?
- php - Laravel5.6 电子邮件不工作而不显示错误
- javascript - 如何告诉 d3js 这个半圆环图应该从左到右填充值
- excel - 公式错误 - 从初始行匹配中提取单独的列数据