Renomeando arquivos com um padrão padrão como e quando eles são adicionados a uma pasta

0

Eu tenho um problema de renomear arquivos em uma estrutura de árvore complexa de pastas

Exemplo de estrutura de pastas:

C:\Folder1\Sub_Folder_1\file_1.extension

C:\Folder2\Sub_Folder_2\file_2.extension

C:\Folder2\file_3.extension

Eu quero que os arquivos sejam nomeados da seguinte forma

Digamos que o arquivo_1.extensão da primeira linha esteja sendo considerado com os seguintes metadados necessários

file_1.extension properties:

Date Created: 17-07-2017

Full File Path: C:\Folder1\Sub_Folder_1\file_1.extension

Original File Name: file_1.extension

O nome completo do arquivo após renomear:

Template : Date Created_Full File Path_Original File Name

Hence : 17-07-17_c-folder1-subfolder1_file1.extension

Consegui conseguir isso com êxito usando Bulk Rename Utility

Mas eu não sou capaz de automatizar este processo para qualquer arquivo que eu crie a partir de agora e tenho que acabar rodando o programa BRU várias vezes.

Existe alguma maneira de automatizar o BRU ou até mesmo tentar executar um arquivo em lote para fazer o mesmo?

    
por user171096 17.07.2017 / 14:18

1 resposta

0

Aqui está um script Powershell que renomeia automaticamente todos os arquivos em uma determinada pasta, desde que o script esteja aberto e em execução

### 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}
    
por 17.07.2017 / 17:34