Добавление даты к имени нескольких файлов в нескольких папках

У меня есть каталог, который содержит 400+ подпапки. В каждой из этих подпапок каждый день появляется новый файл. Каждый новый файл имеет то же имя, что и файл, появившийся вчера в той же папке. Каждая папка содержит файлы с разными именами, чем в другой папке, но новые файлы в той же папке всегда имеют одинаковое имя. Я не хочу, чтобы файлы перезаписывались каждый день. Вместо этого я хотел бы Powershell добавить сегодняшнюю дату после имени файла и перед расширением. Я знаю, как это сделать для одной подпапки, но я не хочу создавать 400+ скриптов (по одному для каждой подпапки).

Это скрипт, который делает работу отлично для каждой отдельной папки.

$fileToRename = "E:BackupABLBackupfolder1Project1.txt"
if (Test-Path $fileToRename)

    {
    $fileName = [system.io.path]::GetFileNameWithoutExtension($fileToRename)
    $dateSuffix = get-date -Format 'yyyy_MM_dd'
    $fileExtension = [system.io.path]::GetExtension($fileToRename)
    $newFileName = '{0}_{1}{2}' -f $fileName, $dateSuffix, $fileExtension
    Rename-Item -Path $fileToRename -NewName $newFileName
}

Я хотел бы знать, как изменить скрипт выше, чтобы все подпапки 400+ могли быть включены в один скрипт. Я знаю, что могу повторить ту же команду 400+ раз и сохранить ее как один сценарий, но это невозможно, потому что пользователи добавляют новые папки без информирует меня. Конечно, должен быть какой-то автоматический способ получения всех новых файлов, которые появились в подпапках.

структура папок выглядит так:

E:BackupABLBackupfolder1Project1.txt

E:BackupABLBackupfolder2Project2.txt

E:BackupABLBackupfolder3Project3.txt

E:BackupABLBackupfolder4Project4.txt

любая помощь будет высоко оценили!

29
задан QWE
20.11.2022 18:38 Количество просмотров материала 3685
Распечатать страницу

1 ответ

Я поклонник держать вещи простыми, до тех пор, пока это не влияет на производительность или функцию. Вы можете добавить слушателей, чтобы обнаружить, когда добавляются новые файлы, и автоматически переименовывать их, но это сложность, которую я не особенно заинтересован в изучении прямо сейчас, а тем более объясняя lol.

Так что простой цикл-если-то я пошел бы.

прежде всего, вам нужно перебирать эти папки:

Get-ChildItem "E:\Backup\ABLBackup" |
  Where PSIsContainer |
  Foreach-Object {}

далее как я понимаю нужно проверить если есть новый файл (в основном тот, который не содержит даты)

if (Get-ChildItem $_.FullName | Where Name -notlike "*_????_??_??.*") {}

положите его вместе с вашим сценарием, прибрал к костюму:

Get-ChildItem "E:\Backup\ABLBackup" |
  Where PSIsContainer |
  Foreach-Object {
    $newitem = Get-ChildItem $_.FullName | Where Name -notlike "*_????_??_??.*"
    if ($newitem)
    {
        $dateSuffix = get-date -Format 'yyyy_MM_dd'
        $newFileName = '{0}_{1}{2}' -f $newitem.BaseName, $dateSuffix, $newitem.Extension
        Rename-Item $newitem -NewName $newFileName
    }
}

настроить запланированное задание для запуска каждые полчаса или что-то, и вы смеетесь.

1
отвечен Deadly-Bagel 2022-11-22 02:26

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

automation
command-line
powershell
script
windows
Вверх