【问题标题】:Trying to copy files with certain a date from folders into another location with a mirrored folder structure尝试将具有特定日期的文件从文件夹复制到具有镜像文件夹结构的另一个位置
【发布时间】:2019-09-15 06:52:09
【问题描述】:

我们正处于文件时间紧缩状态。我们需要从一堆目录中提取 2019 年 4 月 9 日的一堆文件。每个目录都有约 1000 个文件。我们希望将所有这些文件从 2019 年 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\"

}

【问题讨论】:

  • 您可能想要使用的第一件事是-WhatIf 开启Copy-Item。这将告诉您如果完成会发生什么。
  • robocopy 具有用于文件复制/移动操作的旧/新选项。当您有多个文件时,powershell 不是正确的工具 - robocopy 是。
  • Lee_Dailey 是正确的。在各种情况下,Robocopy 等较旧的实用程序做得更好,并且更易于用于此类任务。
  • 有没有办法让特定的一天脱离 robocopy?尝试使用它和 xcopy 但总是抓取比预期更多的文件或根本没有文件。我试过 maxage、minage、xo 和 xn 都没有成功。任何 robocopy 提示?

标签: powershell robocopy xcopy


【解决方案1】:

当使用 [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 肯定会更快。

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多