尝试将具有特定日期的文件从文件夹复制到具有镜像文件夹结构的另一个位置

问题描述 投票:0回答:1

我们正处于文件时间紧迫的状态。从一堆目录中我们需要一些来自2009年4月9日的文件。每个目录都有~1000个文件。我们希望将所有这些文件从2009年4月9日复制到各自的文件夹结构,但只复制那些文件。

我们使用xcopy来复制文件夹结构,并手动复制我们需要的文件。但是,有1000个文件夹,每个文件夹有~1000个文件,因此它构成了很大的障碍。尝试传递我们对copy-item的论点,但它并没有给我带来太多运气。

我假设即使我的乱码也有一些简单的参数或我忽略的东西。我们一直在休息,我浏览了很多主题,并转向社区寻求帮助。我可能在这里的路上通过了我的确切问题。

对于记录,我不经常编码和使用PowerShell。

#Gets all files that were last modified on 4/9/2019
(Get-ChildItem -Recurse | Where-Object {$_.LastWriteTime -gt (Get-Date -month 4 -day 9 -Format d) -and $_.LastWriteTime -lt (Get-Date -month 4 -day 10 -Format d)}) |

#Copies the files from source to destination
Copy-Item "C:\abc\" "D:\abc\"

}
powershell robocopy xcopy
1个回答
0
投票

使用[datetime]类型变量时,不应用-format D这会转换为字符串, 而是通过将.Date附加到双方并测试相等性来剥离时间组件。

在将源递归到子文件夹时,无法指定平面目标

$Source = "C:\abc\" 
$Target = "D:\abc\"
$MyDate = (Get-Date -Month 4 -Day 9 -Year 2019).Date

Get-ChildItem -Path $Src -Recurse | 
    Where-Object {$_.LastWriteTime.Date -eq $MyDate} | ForEach-Object{
        $TargetDir = $_.DirectoryName.replace($Source,$Target)
        If (!(Test-Path $TargetDir)){New-Item $TargetDir -ItemType Directory|Out-Null}
        $_ | Copy-Item -Destination $TargetDir
    }

未经测试,您可以在测试时将-WhatIf参数附加到Copy-Item

一旦找到了正确的参数,Robocopy肯定会更快。

© www.soinside.com 2019 - 2024. All rights reserved.