none
Criar uma Bat ou script para renomear arquivos aumentando caracteres RRS feed

  • Pergunta

  • Pessoal boa noite .. 

    Estou tentando fazer uma bat via DOS mas estou tomando uma surra ...

    necessito renomear sempre milhares de imagens cuja as extensões são diferenciadas . TIPO *.JPG *.TPG *.PPG 

    Nesta pasta tem estas 3 extensões mas preciso renomear todas elas para JPG , mas se eu fizer o comando " ren *.* *.jpg o DOS irá renomear todos os e eu não terei como separar uma imagem da outro no nosso programa da empresa.

    eu preciso renomear as extensões *.ppg  para *.jpg faço o meu trabalho e depois volta para o mesmo formato de origem 

    ex.

    preciso renomear todos *.ppg *.jpg incluindo o nome _pan1.jpg 

      6def56402.ppg -->>      6def56402P_pan1.jpg
      6def56402P.ppg -->>       6def78b92P_pan1.jpg
      6def78b92.ppg -->>      6def78b92_pan1.jpg
      6def78b92P.ppg -->>      6defca061_pan1.jpg
      6defca061.ppg -->>      6defca061P._pan1.jpg
      6defca061P.ppg -->>       6defdcc62_pan1.jpg
      6defdcc62.ppg -->>       6defdcc62P_pan1.jpg
      6defdcc62P.ppg -->>      6df2af771P_pan1.jpg
      6df2af771.ppg -->>       6df2af771_pan1.jpg
      6df2af771P.ppg -->>       6df2c54c2P_pan1.jpg
      6df2c54c2.ppg -->>      6df2c54c2_pan1.jpg
      6df2c54c2P.ppg -->>      6df2fdad1P_pan1.jpg
      6df2fdad1.ppg -->>       6df2fdad1_pan1.jpg

    depois vou precisar de uma bat para  voltar para o que era antes 

            

      6def56402P_pan1.jpg-->>   6def56402.ppg
     6def78b92P_pan1.jpg-->>  6def56402P.ppg -
     6def78b92_pan1.jpg-->>  ' 6def78b92.ppg
      6defca061._pan1.jpg-->>   6def78b92P.ppg
       6defca061P._pan1.jpg -->>   6defca061.ppg
       6defdcc62._pan1.jpg-->>  6defca061P.ppg 
       6defdcc62P._pan1.jpg-->>  6defdcc62.ppg
       6df2af771P_pan1.jpg-->>  6defdcc62P.ppg
       6df2af771_pan1.jpg-->>  6df2af771.ppg
       6df2c54c2P_pan1.jpg-->>  6df2af771P.ppg 
       6df2c54c2_pan1.jpg-->>   6df2c54c2.ppg
       6df2fdad1P_pan1.jpg-->>  6df2c54c2P.ppg
       6df2fdad1_pan1.jpg-->>  6df2fdad1.ppg      

     parece simples mas não estou conseguindo fazer uma bat que depois consiga retirar o que foi incluso ou seja _pan1  Não sei se eu fui claro na explicação , mas se alguém puder me ajudar agradeceria muito mesmo..  

    Abração    José Antônio

    terça-feira, 25 de novembro de 2014 21:44

Respostas

  • José Antonio,

    O dir do inicio do script lista todos os arquivos da pasta, então o jeito é mexer no dir ou criar um IF para não pegar outros tipos de arquivo, eu prefiro mexer no DIR, assim:

    foreach($A in (dir "C:\TESTE" | ?{$_.Extension -eq ".ppg" -or $_.Extension -eq ".qpg"})){
    
        
        Rename-Item -Path $A.FullName -NewName ($A.BaseName + "_pan.jpg")
    
    
    }


    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 19:53
    Moderador

Todas as Respostas

  • Pessoal boa noite .. 

    Estou tentando fazer uma bat via DOS mas estou tomando uma surra ...

    necessito renomear sempre milhares de imagens cuja as extensões são diferenciadas . TIPO *.JPG *.TPG *.PPG 

    Nesta pasta tem estas 3 extensões mas preciso renomear todas elas para JPG , mas se eu fizer o comando " ren *.* *.jpg o DOS irá renomear todos os e eu não terei como separar uma imagem da outro no nosso programa da empresa.

    eu preciso renomear as extensões *.ppg  para *.jpg faço o meu trabalho e depois volta para o mesmo formato de origem 

    ex.

    preciso renomear todos *.ppg *.jpg incluindo o nome _pan1.jpg 

      6def56402.ppg -->>      6def56402P_pan1.jpg
      6def56402P.ppg -->>       6def78b92P_pan1.jpg
      6def78b92.ppg -->>      6def78b92_pan1.jpg
      6def78b92P.ppg -->>      6defca061_pan1.jpg
      6defca061.ppg -->>      6defca061P._pan1.jpg
      6defca061P.ppg -->>       6defdcc62_pan1.jpg
      6defdcc62.ppg -->>       6defdcc62P_pan1.jpg
      6defdcc62P.ppg -->>      6df2af771P_pan1.jpg
      6df2af771.ppg -->>       6df2af771_pan1.jpg
      6df2af771P.ppg -->>       6df2c54c2P_pan1.jpg
      6df2c54c2.ppg -->>      6df2c54c2_pan1.jpg
      6df2c54c2P.ppg -->>      6df2fdad1P_pan1.jpg
      6df2fdad1.ppg -->>       6df2fdad1_pan1.jpg

    depois vou precisar de uma bat para  voltar para o que era antes 

            

      6def56402P_pan1.jpg-->>   6def56402.ppg
     6def78b92P_pan1.jpg-->>  6def56402P.ppg -
     6def78b92_pan1.jpg-->>  ' 6def78b92.ppg
      6defca061._pan1.jpg-->>   6def78b92P.ppg
       6defca061P._pan1.jpg -->>   6defca061.ppg
       6defdcc62._pan1.jpg-->>  6defca061P.ppg 
       6defdcc62P._pan1.jpg-->>  6defdcc62.ppg
       6df2af771P_pan1.jpg-->>  6defdcc62P.ppg
       6df2af771_pan1.jpg-->>  6df2af771.ppg
       6df2c54c2P_pan1.jpg-->>  6df2af771P.ppg 
       6df2c54c2_pan1.jpg-->>   6df2c54c2.ppg
       6df2fdad1P_pan1.jpg-->>  6df2c54c2P.ppg
       6df2fdad1_pan1.jpg-->>  6df2fdad1.ppg      

     parece simples mas não estou conseguindo fazer uma bat que depois consiga retirar o que foi incluso ou seja _pan1  Não sei se eu fui claro na explicação , mas se alguém puder me ajudar agradeceria muito mesmo..  

    Abração    José Antônio

                

    ficou fora de ordem na hora de postar mas o correto é  

      6def56402.ppg -->>  6def56402_pan1.ppg
      6def56402P.ppg -->>   6def56402P_pan1.jpg 
      6def78b92.ppg -->>      6def78b92P_pan1.jpg 
      6def78b92P.ppg -->>  6def78b92_pan1.jpg   
      6defca061.ppg -->>        6defca061_pan1.jpg   
      6defca061P.ppg -->>   6defca061P._pan1.jpg 
      6defdcc62.ppg -->>    6defdcc62_pan1.jpg   
      6defdcc62P.ppg -->> 6defdcc62P_pan1.jpg
      6df2af771.ppg -->>     6df2af771_pan1.jpg      
      6df2af771P.ppg -->>     6df2af771P_pan1.jpg 
      6df2c54c2.ppg -->>        6df2c54c2P_pan1.jpg   
      6df2c54c2P.ppg -->> 6df2c54c2_pan1.jpg   
      6df2fdad1P.ppg -->>    6df2fdad1P_pan1.jpg   
     

    depois vou precisar de uma bat para  voltar para o que era antes 

      6def56402_pan1.ppg -->>        6def56402.ppg
      6def56402P_pan1.jpg-->>   6def56402P.ppg 
      6def78b92P_pan1.jpg-->> -   6def78b92.ppg
      6def78b92_pan1.jpg-->>   6def78b92P.ppg
      6defca061._pan1.jpg-->>  '6defca061.ppg
       6defca061P._pan1.jpg -->>   6defca061P.ppg
       6defdcc62._pan1.jpg-->>   6defdcc62.ppg
       6defdcc62P._pan1.jpg-->>   6defdcc62P.ppg
       6df2af771P_pan1.jpg-->>   6df2af771.ppg
       6df2af771_pan1.jpg-->>   6df2af771P.ppg 
       6df2c54c2P_pan1.jpg-->>   6df2c54c2.ppg
       6df2c54c2_pan1.jpg-->>   6df2c54c2P.ppg
       6df2fdad1P_pan1.jpg-->>   6df2fdad1.ppg
       6df2fdad1_pan1.jpg-->>   6df2fdad1.ppg


    terça-feira, 25 de novembro de 2014 21:52
  • Olá José,

    Posta o que você conseguiu fazer até agora.
    Eu faria em PowerShell, mas se você já começou o Batch pode ser mais fácil ajustá-lo para o que você precisa.


    Att, Paulo Rocha MCP | MCDST | MCSA Server 2012

    terça-feira, 25 de novembro de 2014 22:57
  • Paulo bom dia .

    eu fiz o seguinte :

    para renomear arquivos para JPG 

    echo   renomear imagens PPG QPG PARA JPG 
    d:
    cd inserir_tarja

    ren *.ppg "*.pan1.jpg"
    ren *.qpg "*.pan2.jpg"

    Depois eu quero renomear de voltar as extensões de origem:

    echo   renomear imagens PPG QPG PARA JPG 
    d:
    cd inserir_tarja

    ren "*.pan1.jpg" *.ppg
    ren "*.pan2.jpg" "*.qpg"
    ren *.qpg "*  .qpg

    só que não vai da mesma forma de origem .. ele renomea para *.ppg e *.qpg porém ele fica com o nome do arquivo assim:

    6df2af771_pan1.jpg-->> correto é:   6df2af771P.ppg  6df2af771_pan1.ppg ( mandendo o nome "_pan1")
    6df2c54c2P_pan1.jpg-->>correto é:  6df2c54c2.ppg   6df2c54c2P_pan1.ppg ( mandendo o nome "_pan1") 

    assim para todos os outros arquivos... 

    Paulo se puder me ajudar amigo ficarei muito grato e iria me ajudar bastante no meu trabalho..

    Saudações 

    José Antônio Duarte

    segunda-feira, 1 de dezembro de 2014 11:24
  • Em PowerShell.

    #troca nome
    foreach($A in (dir "C:\TESTE")){
    
        
        Rename-Item -Path $A.FullName -NewName ($A.BaseName + "_pan.jpg")
    
    
    }
    
    
    #"Destroca"
    foreach($A in (dir "C:\TESTE")){
    
        
        Rename-Item -Path $A.FullName -NewName ( ($A.BaseName -replace "_pan","") + ".ppg")
    
    
    }


    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 16:29
    Moderador
  • Boa tarde amigo Fábio 

    Não manjo nada de powershell ..rsrs 

    pra falar a verdade nem sei criar esse tipo de arquivo.

    pode me dar uma luz ? 

    desde já agradeço sua atenção indispensável ..

    Saudações 

    José Antônio Duarte

    terça-feira, 2 de dezembro de 2014 17:03
  • Aconselho usar pelo menos a versão 3.0 do Powershell, use o aplicativo PowerShell ISE (já vem com o 3.0), muito bom pra depurar scripts.

    O script que te passei são dois blocos, copie pra dentro do ISE e execute. Não se esqueça de alterar o caminho da pasta onde estão os seus arquivos.

    Ref.:

    Instalando o Windows PowerShell 3.0 ou 4.0

    http://www.mcsesolution.com/PowerShell/instalando-o-windows-powershell-30-ou-40.html


    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 17:21
    Moderador
  • Fabio legal ..

    fiz isso ..

    mas deu esse erro que ainda não consegui encontrar como resolver :

    PS C:\teste> C:\teste\trocar nome arquivo.ps1
    O arquivo C:\teste\trocar nome arquivo.ps1 não pode ser carregado porque a execução de scripts foi desabilitada neste sistema. Consulte "get-help about_signing" para obter mais detalhe
    s.
    At line:0 char:0

    terça-feira, 2 de dezembro de 2014 17:35
  • Abra um prompt do PowerShell como administrador(importante!!!), execute o seguinte comando.

    Set-ExecutionPolicy Unrestricted

    Eu usei Unrestricted que já vai bastar pra você, mas vale a pena você procurar ler sobre o set-executionpolicy pra saber qual a politica mais adequada pra você.

    Se depois que você executou este comando ainda assim não funcionar o seu script, feche o ISE e abra novamente.


    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 17:38
    Moderador
  • Fiz e executei este comando no powershell via Administrador :

    perguntou se confirmaria Sim ou Não : Confirmei .

    agora rodei e deu esse erro :

    PS C:\teste> C:\teste\trocar nome arquivo.ps1
    '}' de fechamento ausente no bloco de instruções.
    Em C:\teste\trocar nome arquivo.ps1:15 caractere:88
    +     Rename-Item -Path $A.FullName -NewName ( ($A.BaseName -replace "_pan","") + ".ppg") <<<< 
        + CategoryInfo          : ParserError: (CloseBraceToken:TokenId) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingEndCurlyBrace

    terça-feira, 2 de dezembro de 2014 17:43
  • Parece que está faltando um "}", mande um print da sua tela com todo o código que você está executando.

    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 17:48
    Moderador
  • Fabio Rodou legal .. 

    era realmente a chave no final da linha que estava faltando ..tú é o cara mesmo... 

    mas teve um detalhe .. 

    O Script trocou os arquivos jpg  e aumentou o nome _pan

    o que eu realmente preciso é pegar as extensões .ppg e .qpg e transformar em .jpg com o nome a mais _pan. 

    Tem jeito ? 

    Desde já agradeço 


    terça-feira, 2 de dezembro de 2014 17:58
  • olha como ficou 
    terça-feira, 2 de dezembro de 2014 18:02
  • José Antonio,

    O dir do inicio do script lista todos os arquivos da pasta, então o jeito é mexer no dir ou criar um IF para não pegar outros tipos de arquivo, eu prefiro mexer no DIR, assim:

    foreach($A in (dir "C:\TESTE" | ?{$_.Extension -eq ".ppg" -or $_.Extension -eq ".qpg"})){
    
        
        Rename-Item -Path $A.FullName -NewName ($A.BaseName + "_pan.jpg")
    
    
    }


    Fábio de Paula Junior

    terça-feira, 2 de dezembro de 2014 19:53
    Moderador
  • Fabio rodei da forma que vc me mandou mas deu erro novamente :

    Desde já agradeço 

    obrigado 

    quarta-feira, 3 de dezembro de 2014 12:16
  • Você não estaria tentando renomear o arquivo para um nome de um arquivo que já existe?

    Ao invés de usar o renomear você pode usar o move.

    Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath ($A.BaseName + "_pan.jpg")) -Force


    Fábio de Paula Junior


    quarta-feira, 3 de dezembro de 2014 15:59
    Moderador
  • Fabio com este comando ele executou corretamente , porém fez somente um arquivo , tem como fazer para todos * .ppg  e *.qpg ? 

    quinta-feira, 4 de dezembro de 2014 12:47
  • Posta o script que você executou.

    Fábio de Paula Junior

    quinta-feira, 4 de dezembro de 2014 15:40
    Moderador
  • Bom dia Fabio 

    Segue o script:

    Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath ($A.BaseName + "_pan.jpg")) -Force

    sexta-feira, 5 de dezembro de 2014 10:07
  • Cadê o FOREACH?

    O foreach é que faz o script "passear" pelos arquivos.


    Fábio de Paula Junior

    sexta-feira, 5 de dezembro de 2014 10:21
    Moderador
  • olá fabio é vdd ..

    não estava atentando que deveria somente alterar o comando:

    ficou assim :

        
    foreach($A in (dir "C:\TESTE" | ?{$_.Extension -eq ".ppg" -or $_.Extension -eq ".qpg"})){
    
    
        Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath ($A.BaseName + "_pan.jpg")) -Force
    
    }


    rodou legal do jeito que eu estava precisando 

    No entanto ele apagou as extensões .qpg

    Tem como fazer o seguinte :

    ppg passar para   _pan1 

    qpg passar para   _pan2

    Será que tem como ? 

    desde já agradeço 

    José Antônio Duarte


    • Editado Fábio JrModerator sexta-feira, 5 de dezembro de 2014 14:46 formatacao do codigo
    sexta-feira, 5 de dezembro de 2014 13:22
  • Veja bem, nesse loop está filtrando ppg e qpg, faça então dois loops, um pra cada um e aí dentro do loop vc modifica o _pan.

    Tenta aí e se tiver problema posta o que você tentou.


    Fábio de Paula Junior

    sexta-feira, 5 de dezembro de 2014 14:47
    Moderador
  • Fábio boa tarde. 

    Consegui seguindo sua dica... 

    ficou assim: 

       

    foreach($A in (dir "C:\TESTE" | ?{$_.Extension -eq ".ppg"})){


        Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath ($A.BaseName + "_pan1.jpg")) -Force}



    foreach($A in (dir "C:\TESTE" | ?{$_.Extension -eq ".qpg"})){

    Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath ($A.BaseName + "_pan2.jpg")) -Force}

    olha o resultado: 

    Agora para mim poder fazer o inverso como eu faria  ? 

    desde já agradeço

    sexta-feira, 5 de dezembro de 2014 16:25
  • José Antônio,

    Veja este trecho.

    foreach($A in (dir "C:\TESTE" | ?{$_.Name -like "*_pan1.jpg"})){
    
        $NovoNome = $A.Name -replace "_pan1.jpg",".ppg"
    
        Move-Item -Path $A.FullName -Destination (Join-path  $A.DirectoryName  -ChildPath $NovoNome) -Force
    
    
    }

    Fiz um foreach (pra passar por cada um dos arquivos), e filtrei pra pegar apenas os arquivos cujo o nome terminem em "_pan1.jpg".

    Dentro do laço primeiro construí o novo nome que é trocar o trecho "_pan1.jpg" por ".ppg".

    Por último utilizei o move-item similar ao que tinha feito antes.

    Teste, se funcionar faça um outro loop para os arquivos "_pan2.jpg"


    Fábio de Paula Junior


    terça-feira, 9 de dezembro de 2014 15:31
    Moderador
  • Fábio vc é o cara ..

    Deu certo amigo , funcionou perfeito .. voltou para o que era antes ..

    Muito obrigado mesmo vai me ajudar demais no meu dia a dia ..

    Desde já agradeço muito sua disposição e atenção .

    Fica com DEUS companheiro 

    Saudações 

    José Antônio Duarte

    terça-feira, 9 de dezembro de 2014 16:48
  • e seu ao invés de utilizar a extensão eu quisesse filtrar pela descrição, como ficaria ?
    terça-feira, 8 de maio de 2018 02:39
  • Olá, lendo essa postagem, ela se parece muito com o que eu quero.

    estou precisando de renomear o arquivo dessa forma.

    "00098756-55465.pdf" para > "00098756.pdf" teria como? 

    tenho milhares de arquivos dessa maneira para ser renomeado. rsrs

    segunda-feira, 20 de agosto de 2018 20:27