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

时间:2019-04-25 19:04:25

标签: powershell robocopy xcopy

我们正在处理文件timecrunch。从一堆目录中需要一堆来自4/9/2019的文件。每个目录都有〜1000个文件。我们要将所有这些文件从4/9/2019复制到各自的文件夹结构中,但仅复制这些文件。

我们使用xcopy复制了文件夹结构,并一直在手动复制所需的文件。但是,有1000个文件夹,每个文件夹包含约1000个文件,因此这是一个很大的障碍。试图将我们的论点传递给复制项目,但并没有给我带来太多的运气。

即使我的代码乱码,我仍然假设有一些简单的参数或我忽略的东西。我们一直在努力工作,我浏览了许多主题,并向社区寻求帮助。我很可能在这里碰到了我的确切问题。

为便于记录,我不编写代码,不经常使用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\"

}

1 个答案:

答案 0 :(得分: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

一旦找到正确的参数,自动复制肯定会更快。