1

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

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

Каждое имя файла содержит уникальную отметку времени и даты как часть имени файла. Это немного запутанно, но формат:

YYYYMMDDHHmmSSSSS

Я подумал, что PowerShell может найти способ пометить «мм» в имени файла и сравнить его с текущим временем. Если ему меньше пяти минут, он двигается. Если ему больше пяти минут, он оставляет его в покое.

Это возможно?

1 ответ1

2

Попробуйте следующее:

Get-ChildItem |
Where-Object {
  [datetime]::ParseExact($_.BaseName, "yyyyMMddHHmmss", $null) -gt (Get-Date).AddMinutes(-5)
} |
Move-Item -Destination C:\Path\to\target_dir

Я делю код на несколько строк для удобства чтения, но вы, конечно, можете превратить его в однострочник и даже немного сократить его, используя псевдонимы PowerShell.


объяснение

  • Get-ChildItem возвращает список всех файлов в текущем каталоге. Примечание: он также возвращает подкаталоги, но этот код предполагает, что у вас есть только файлы там. Результаты передаются по конвейеру (|) к следующей команде.

  • Where-Object просматривает результаты предыдущей команды и возвращает только те, которые соответствуют указанным критериям. $_ представляет текущий файл каждой итерации, а .BaseName возвращает расширение без имени файла.

  • Функция [datetime]::ParseExact() принимает строку и формат даты и преобразует их в объект datetime.

  • Get-Date возвращает текущую дату и время. Функция AddMinutes() вычитает 5 минут от текущего времени.

  • Файлы, возвращаемые Where-Object , - это файлы, в которых дата и время, представленные в имени файла, не более чем на 5 минут старше текущего времени.

  • Наконец, Move-Item перемещает соответствующие файлы в указанный каталог.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .