У меня проблема переименования файлов в сложной древовидной структуре папок

Пример структуры папок:

C:\Folder1\Sub_Folder_1\file_1.extension

C:\Folder2\Sub_Folder_2\file_2.extension

C:\Folder2\file_3.extension

Я хочу, чтобы файлы были названы следующим образом

Скажите, что file_1.extension из первой строки рассматривается со следующими необходимыми метаданными

Свойства file_1.extension:

Дата создания: 17-07-2017

Полный путь к файлу: C:\Folder1\Sub_Folder_1\file_1.extension

Исходное имя файла: file_1.extension

Полное имя файла после переименования:

Шаблон: Дата создания _ Полный путь к файлу _ Исходное имя файла

Следовательно: 17-07-17_c-folder1-subfolder1_file1.extension

Я смог успешно добиться этого с помощью утилиты Bulk Rename

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

Есть ли способ автоматизировать BRU или даже попробовать запустить командный файл, чтобы сделать то же самое?

1 ответ1

0

Вот скрипт Powershell, который автоматически переименовывает все файлы в данной папке, если скрипт открыт и работает

### SET FOLDER TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Users\nixda\Desktop\test"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true

### SET ACTION AFTER A FILE IS CREATED
$action = {
    $item   = Get-Item -path $Event.SourceEventArgs.FullPath

    if (-not $item.PSIsContainer) {
        $date     = Get-Date $item.CreationTime -format yy-MM-dd
        $folder   = $item.DirectoryName -replace '\\', '-' -replace ':'
        $newName  = "$($date)_$($folder)_$($item.Name)"

        ### IF PATH ALREADY EXISTS, INCREMENT NUMBER UNTIL WE HAVE A FREE NAME
        $fullPath = "$($item.Directory)/$newName"
        while (Test-Path -Path $fullPath){
            $i++
            $newName = "$($date)_$($folder)_$($item.BaseName) ($i).$($item.Extension)"
            $fullPath = "$($item.Directory)/$newName"
        }

        Rename-Item $item -newName $newName
    } 
}    

### SET WHICH FILE EVENTS SHOULD BE WATCHED 
Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}

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