Попытка скопировать файлы с определенной датой из папок в другое место с зеркальной структурой папок - PullRequest
0 голосов
/ 25 апреля 2019

Мы находимся в каком-то временном кризисе файла. Есть куча файлов от 9/4/2019, которые нам нужны из набора каталогов. В каждом каталоге ~ 1000 файлов. Мы хотим скопировать все эти файлы с 9/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\"

}

1 Ответ

0 голосов
/ 26 апреля 2019

При работе с переменными типа [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 наверняка быстрее, как только вы нашли правильные параметры.

...