如何用PowerShell按创建日期(非修改日期)复制两目录间24小时内的JPG/JPEG文件?
基于文件创建日期复制的PowerShell解决方案
没问题,这个需求用PowerShell实现起来很直接,我给你整理了具体的命令和细节说明,确保你能精准完成操作:
核心思路
要实现按创建日期而非修改日期筛选文件,关键是利用PowerShell中文件对象的CreationTime(本地时间)或CreationTimeUtc(UTC时间)属性,结合时间范围过滤后执行复制。
具体命令示例
假设你的源目录是C:\MyPhotos\Source,目标目录是C:\MyPhotos\Backup,以下是完整的实现命令:
# 计算24小时前的时间节点(本地时间) $24HoursAgo = (Get-Date).AddHours(-24) # 筛选并复制过去24小时内创建的JPG/JPEG文件 Get-ChildItem -Path "C:\MyPhotos\Source" -Include "*.jpg", "*.jpeg" -File -Recurse | Where-Object { $_.CreationTime -ge $24HoursAgo } | Copy-Item -Destination "C:\MyPhotos\Backup" -Force
命令细节解释
$24HoursAgo:用Get-Date获取当前时间,再减去24小时,得到筛选的时间阈值。Get-ChildItem:-Path:指定源目录路径;-Include:同时匹配.jpg和.jpeg两种扩展名;-File:只筛选文件(排除子目录);-Recurse:递归遍历源目录下的所有子文件夹(如果不需要递归,直接去掉这个参数即可)。
Where-Object { $_.CreationTime -ge $24HoursAgo }:只保留创建时间晚于24小时前的文件,这里用-ge(大于等于)确保刚好24小时前创建的文件也会被选中。Copy-Item:-Destination:指定目标目录;-Force:如果目标目录已有同名文件,会直接覆盖(如果不想覆盖,去掉这个参数即可)。
时区注意事项
如果你的系统或文件服务器使用UTC时间,建议改用CreationTimeUtc属性,避免时区偏差:
$24HoursAgoUtc = (Get-Date).ToUniversalTime().AddHours(-24) Get-ChildItem -Path "C:\MyPhotos\Source" -Include "*.jpg", "*.jpeg" -File -Recurse | Where-Object { $_.CreationTimeUtc -ge $24HoursAgoUtc } | Copy-Item -Destination "C:\MyPhotos\Backup" -Force
测试建议
在正式执行复制前,你可以先去掉Copy-Item部分,用Select-Object查看筛选出的文件列表,确认是否符合预期:
Get-ChildItem -Path "C:\MyPhotos\Source" -Include "*.jpg", "*.jpeg" -File -Recurse | Where-Object { $_.CreationTime -ge $24HoursAgo } | Select-Object FullName, CreationTime
内容的提问来源于stack exchange,提问作者mohamedali.lotfy
相关产品推荐
相关产品推荐

