Member 14068043 Ответов: 1

Скопируйте только последний файл из вложенных папок


У меня есть папка, содержащая более 1000 папок документов; каждая папка doc имеет 1 или более версий документа (может быть excel, word, html-типы).

Как я могу использовать PowerShell для копирования только самой последней версии из подпапок в одну папку, чтобы я мог выполнять поиск PowerGREP?

После того, как я получу начальную папку файлов; есть ли простой способ сохранить ее?

Любая помощь очень ценится!

Что я уже пробовал:

Поискал в Google и посмотрел на эту тему в проекте кода: копирование файлов с помощью Microsoft Powershell

Mohibur Rashid

Каково правило идентификации последнего файла?

Member 14068043

Правила таковы:
-если папка пуста, продолжайте (это означает, что создается новый документ)
-если в папке есть 1 файл, скопируйте его. У меня нет даты начала.
-если в папке есть несколько файлов, скопируйте тот, который был сохранен в последний раз.
-если папка помечена как "архивная" - пропустите эту папку и ее подпапки.

Нет никакой последовательности в именовании файлов. Есть текущие файлы, которые имеют метку времени, добавленную к концу имени файла, большинство из них этого не делают. Это нечто более недавнее.

Я мог бы вручную вытащить копию текущих файлов {kringing}, а затем еженедельно использовать поиск Windows для создания списка новых имен файлов для извлечения с помощью Powershell? Мне придется вручную удалить старые.

Но будет ли это легче выяснить? Спасибо вам ооочень много за то, что вы взглянули на это :-)

Mohibur Rashid

Вы рассматривали возможность сравнения временной метки последнего Чанга?

Member 14068043

Можно ли это использовать, если само имя файла отличается?

Mohibur Rashid

Это было бы очень трудно, если бы имя файла было другим. Особенно в случае двоичного файла. Если бы вы подумали о системе управления файлами (я знаю, что ваша текущая мысль-powershell), где пользователь может загрузить последний файл под ключом, то не имело бы значения, каким будет имя файла, или даже в тех случаях, когда тип файла будет изменен.

Mohibur Rashid

Еще один вариант-это интеллектуальное программное обеспечение, такое как git, git может отслеживать изменения и даже переименовывать файлы, а также хранить исторические данные. Но это хорошо работает только для текстового файла, а не для двоичного файла

1 Ответов

Рейтинг:
2

Member 14068043

Один из коллег нашел этот полезный сайт: Тема: дата возврата последнего измененного файла в каждом субдиректоре | PowerShell.org[^]

Он написал следующее решение. Он не исключает папки, но пересекает папки и копирует самый последний файл:

# Определите папку, которую вы хотите найти
$projectsFolder = 'C:\Users\swidene\Documents\DELETE\ACE повышение'
# Получите подпапки искомой папки и найдите самый последний измененный файл
# Сортировка этих файлов по дате последнего изменения в порядке убывания
#скопируйте их в новую папку, выберите свойства Name, LastWriteTime и FullName и запишите их в файл csv #
Получить-ChildItem -literalpath командлета $projectsFolder -каталог -группа | по каждому элементу-объекта {
# Получить все файлы в каждой подпапке, отсортированные по дате последнего изменения в порядке убывания, выбрать первый (самый последний измененный файл) и вернуть его
Get-ChildItem -LiteralPath $_.Полное Имя-Файла -Рекурсия -Сила | Рода-Объект-Свойство LastWriteTime -Убыванию | Выберите Объект -Первый 1
} | Sort-Object -Property LastWriteTime -По Убыванию |
скопировать-пункт -назначения ("C:\Users\swidene\Documents\DELETE\Backup")