尝试将具有特定日期的文件从文件夹复制到具有镜像文件夹结构的另一个位置
Trying to copy files with certain a date from folders into another location with a mirrored folder structure
我们正处于一种文件时间紧缩状态。我们需要一堆目录中的一堆来自 4/9/2019 的文件。每个目录都有约 1000 个文件。我们想将所有这些文件从 4/9/2019 复制到它们各自的文件夹结构,但只复制那些文件。
我们使用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\"
}
使用 [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 肯定会更快。
我们正处于一种文件时间紧缩状态。我们需要一堆目录中的一堆来自 4/9/2019 的文件。每个目录都有约 1000 个文件。我们想将所有这些文件从 4/9/2019 复制到它们各自的文件夹结构,但只复制那些文件。
我们使用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\"
}
使用 [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 肯定会更快。