我们正处于文件时间紧迫的状态。从一堆目录中我们需要一些来自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\"
}
使用[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肯定会更快。