none
Script para renomear varios arquivos (mantendo o nome original do arquivo e fazer apenas uma alteração no final do nome) RRS feed

  • Pergunta

  • Gostaria de saber se tem um script para renomear os arquivos mais mantendo o nome base.

    Exemplo de arquivos:

    Antes de executar o script:

    Planilha.xls

    Documento.doc

    Imagem.jpg

    Após execução do script:

    Planilha_backup.xls

    Documento_backup.doc

    Imagem_backup.jpg

    No caso ele mantém o nome original (base) de todos os arquivos mas adiciona no final dele o _backup.

    Seria possível realizar esse tipo de procedimento via script e para alterar vários arquivos dessa forma?

    quarta-feira, 24 de julho de 2013 18:51

Respostas

  • Marcelo,

    Tente isto:

    forfiles /P c:\temp\ /c "cmd /c rename @path @fname_backup.@ext"

    Ele lê todos os arquivos do diretório c:\temp, executa o rename, usa o @path (caminho completo do arquivo) como primeiro parametro e o segundo é o @fname_backup.@ext"

    O Forfiles funciona como um FOR EACH comum em várias linguagens, ele vai executa o comando em cada um dos arquivos.


    Fábio de Paula Junior

    • Marcado como Resposta MarceloGuedes quinta-feira, 25 de julho de 2013 19:02
    quinta-feira, 25 de julho de 2013 16:01
    Moderador
  • Olá,

    existe uma outra opção utilizando powershell:

    $i = "_backup"

    dir -Recurse | % {ren -Path $_.fullname ($_.name.substring(0, $_.name.length-4) +$i +$_.Extension ) }

    acesse o diretório onde estão os arquivos e a partir desde diretório o posh vai começar a renomear os arquivos... ele vai gerar um erro quando chegar em arquivos sem extensão ou diretórios.


    -- Ricardo Leka - http://leka.com.br

    • Marcado como Resposta MarceloGuedes quinta-feira, 25 de julho de 2013 19:02
    quinta-feira, 25 de julho de 2013 18:32

Todas as Respostas

  • Marcelo,

    Experimente usar o comando FORFILES, as opções @fname e @ext vão te ajudar.

    Ref.:

    FORFILES /?

    C:\Users\fpjr>forfiles /?
    
    FORFILES [/P pathname] [/M searchmask] [/S]
             [/C command] [/D [+ | -] {dd/MM/yyyy | dd}]
    
    Descrição:
        Seleciona um arquivo (ou conjunto de arquivos) e executa um
        comando nesse arquivo. Isso é útil para trabalhos em lotes.
    
    Lista de parâmetros:
        /P    pathname      Indica o caminho para se iniciar a pesquisa.
                            A pasta padrão é o diretório de trabalho
                            atual (.).
    
        /M    searchmask    Pesquisa arquivos de acordo com uma máscara de pesquis
    
                            A máscara de pesquisa padrão é '*' .
    
        /S                  Instrui forfiles a incluir
                            subpastas. Semelhante a "DIR /S".
    
        /C    comando       Indica o comando a ser executado para cada arquivo.
                            Cadeias de caracteres de comando devem vir entre
                            aspas duplas.
    
                            O comando padrão é "cmd /c echo @file".
    
                            As seguintes variáveis podem ser usadas na
                            cadeia de caracteres de comandos:
                            @file    - retorna o nome do arquivo.
                            @fname   - retorna o nome de arquivo sem
                                       a extensão.
                            @ext     - retorna apenas a extensão do
                                       arquivo.
                            @path    - retorna o caminho completo do arquivo.
                            @relpath - retorna o caminho relativo do
                                       arquivo.
                            @isdir   - retorna "TRUE" se um tipo de arquivo for
                                       um diretório e "FALSE" para arquivos.
                            @fsize   - retorna o tamanho do arquivo em
                                       bytes.
                            @fdate   - retorna a data da última modificação do
                                       arquivo.
                            @ftime   - retorna a hora da última modificação do
                                       arquivo.
    
                            Para incluir caracteres especiais na linha
                            de comando , use o código hexadecimal do caractere
                            no formato 0xHH (por ex., 0x09 para tabulação).
                            Comandos CMD.exe internos devem ser precedidos de
                            "cmd /c".
    
        /D    data          Seleciona arquivos com uma data de última modificação
                            posterior ou igual a (+) ou anterior ou igual
                            (-), à data especificada usando o
                            formato "dd/MM/yyyy"; ou seleciona arquivos com uma
                            data de última modificação posterior ou igual (+)
                            à data atual mais "dd" dias ou anterior ou
                            igual (-) à data atual menos "dd" dias. Um
                            número de dias "dd" válido pode ser qualquer número
                            no intervalo de 0 - 32768.
                            "+" é o sinal padrão se não for especificado.
    
        /?                  Exibe esta mensagem de ajuda.
    
    Exemplos:
        FORFILES /?
        FORFILES
        FORFILES /P C:\WINDOWS /S /M DNS*.*
        FORFILES /S /M *.txt /C "cmd /c type @file | more"
        FORFILES /P C:\ /S /M *.bat
        FORFILES /D -30 /M *.exe
                 /C "cmd /c echo @path 0x09 was changed 30 days ago"
        FORFILES /D 01/01/2001
                 /C "cmd /c echo @fname is new since Jan 1st 2001"
        FORFILES /D +24/7/2013 /C "cmd /c echo @fname is new today"
        FORFILES /M *.exe /D +1
        FORFILES /S /M *.doc /C "cmd /c echo @fsize"
        FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"


    Fábio de Paula Junior

    quarta-feira, 24 de julho de 2013 21:53
    Moderador
  • Fábio,

    Primeiro muito obrigado pela resposta e pela ajuda.

    Nunca usei esse forfiles, vou ver se consigo fazer aqui funcionar, por enquanto to me batendo um pouco.

    Se tiverem mais alguma ideia de como realizar o procedimento, só falar.

    Abss

    quinta-feira, 25 de julho de 2013 12:19
  • Marcelo,

    Tente isto:

    forfiles /P c:\temp\ /c "cmd /c rename @path @fname_backup.@ext"

    Ele lê todos os arquivos do diretório c:\temp, executa o rename, usa o @path (caminho completo do arquivo) como primeiro parametro e o segundo é o @fname_backup.@ext"

    O Forfiles funciona como um FOR EACH comum em várias linguagens, ele vai executa o comando em cada um dos arquivos.


    Fábio de Paula Junior

    • Marcado como Resposta MarceloGuedes quinta-feira, 25 de julho de 2013 19:02
    quinta-feira, 25 de julho de 2013 16:01
    Moderador
  • Olá,

    existe uma outra opção utilizando powershell:

    $i = "_backup"

    dir -Recurse | % {ren -Path $_.fullname ($_.name.substring(0, $_.name.length-4) +$i +$_.Extension ) }

    acesse o diretório onde estão os arquivos e a partir desde diretório o posh vai começar a renomear os arquivos... ele vai gerar um erro quando chegar em arquivos sem extensão ou diretórios.


    -- Ricardo Leka - http://leka.com.br

    • Marcado como Resposta MarceloGuedes quinta-feira, 25 de julho de 2013 19:02
    quinta-feira, 25 de julho de 2013 18:32
  • Fabio e Ricardo,

    Muito obrigado novamente pela ajuda irei realizar os testes e depois venho aqui informar.

    Abraços

    quinta-feira, 25 de julho de 2013 18:53
  • Fabio e Ricardo,

    Acabei de testar os comandos e os 2 exemplos funcionaram perfeitamente, agradeço mais uma vez a ajuda prestada.

    Muito Obrigado.


    • Editado MarceloGuedes quinta-feira, 25 de julho de 2013 19:35 erro ortográfico
    quinta-feira, 25 de julho de 2013 19:02
  • Boa tarde,

    E para renomerar arquivos, substituindo as primeiras letras?

    Ex: 

    Arquivo original

    YYY123.txt

    YYY456.txt

    YYY789.txt

    Mudar para:

    XXX123.txt

    XXX456.txt

    XXX789.txt

    sexta-feira, 2 de maio de 2014 14:43
  • Eduardo,

    Sugiro que uso o powershell.

    Dentro de um loop que leia os arquivos você pode usar o Rename-item em conjunto com o replace para alterar o Y para X.


    Fábio de Paula Junior

    • Sugerido como Resposta Walter Teixeira segunda-feira, 5 de maio de 2014 14:13
    segunda-feira, 5 de maio de 2014 13:36
    Moderador
  • Tem uma forma bem fácil usando DOS:

    Mudando somente o 4ª posição de tras para frente- trocando o 2 pelo 1 sem alterar o restante do nome

    Arquivo:       20150905090058302003.jpg

    Mudar para: 20150905090058301003.jpg

    c:\ren ????????????????1???.jpg ????????????????2???.jpg

    ---------------------------------------------------------------------------------

    ou mudar para 2015090509005830-teste-003.jpg 

    c:\ren ????????????????1???.jpg ????????????????-teste-???.jpg


    domingo, 6 de setembro de 2015 16:10
  • Boa tarde,

    Gostaria de alterar o  nome do arquivo:

    DE - 088831.OLD.vdr.20151019-16424611 

    PARA - 088831.zip

    Tentei com o ren *.OLD.* *.ZIP mas o resultado não foi o esperado (088842.OLD.vdr.zip)

    Poderiam auxiliar?

    Att

    Luan Dotto

    terça-feira, 20 de outubro de 2015 14:31
  • Boa tarde,

    Como eu uso  o FORFILES para incluir a data atual no final do nome do arquivo? EX: lê todos os arquivos do diretório c:\temp, executa o rename, usa o @path (caminho completo do arquivo) como primeiro parametro e o segundo é o @fname_atualdata.@ext".

    Att.

    Renan

    terça-feira, 12 de abril de 2016 20:38
  • Ola eu tentei esse comando e funcionou, muito obrigado.

    Mas tem uma situação similar que gostaria de saber se é possivel fazer a mesma coisa para as pastas?

    Presciso renomear um numero considerado de pastas mas parcialmente por exemplo/

    DE: 01323252000153-doc33-102016-orig

    PARA: 88nomedaempresa-doc33-102016-orig 

    Será que existe algum comando no CMD ou no powershell que possa fazer essa alteração?

    quarta-feira, 21 de dezembro de 2016 19:55
  • Boa tarde !!

    Você terá que criar um bat , nele você vai criar uma variavel para data  ( SET TODAY=%DATE:~0,2%-%date:~3,2%-%date:~6,4% ) , onde TODAY vai ser a data atual . 

    Após isso inclua as seguintes linhas no mesmo bat ( forfiles /P c:\temp\ /c "cmd /c rename @path @fname_TODAY.@ext")  esse comando irá renomear arquivos da pasta c:\temp, colocando o nome deles com _data atual. 

    segunda-feira, 9 de janeiro de 2017 19:10
  • -- Para COPIAR ou RENOMEAR mudando apenas alguns dígitos:

    -- Ex. de Arquivos:

    /*

    Pasta de C:\WinThor\SPOOL\TESTE

    26/01/2017  09:38    <DIR>          .
    26/01/2017  09:38    <DIR>          ..
    08/09/2016  10:22             3.325 101_85cxGrid1DBTableView1.grd
    08/09/2016  10:22             1.476 101_85cxGridDBTableView1.grd
    08/09/2016  10:22             2.022 101_85cxGridDBTableView2.grd
    19/10/2016  14:36               180 104_85.ini
    19/10/2016  14:36             7.716 104_85tblFalta.grd
    02/09/2016  11:41             8.590 105_85cxGridDBTableView1.grd
    24/01/2017  10:29             5.837 1103_85vwListaMovimentacoes.grd
    28/09/2015  19:24             2.975 1106_85tvBonus.grd
    28/09/2015  19:24             2.727 1106_85tvNotasEntrada.grd
    28/09/2015  19:24             4.406 1106_85tvProdutos.grd
    30/03/2016  16:51             7.075 1107_85tvEst.grd
    23/11/2016  16:55             1.872 1118_85cxGridDBTableView1.grd
    23/11/2016  16:55             2.116 1118_85tvAjuste.grd
    23/11/2016  16:55               575 1118_85tvAvulsa.grd
    29/07/2016  10:50             1.636 117_85tblVale.grd
    26/01/2017  08:33             2.369 1203_85cxgrdbtblvwGrid2DBTableView1.grd
    26/01/2017  08:33             3.538 1203_85cxgrdbtblvwGrid2DBTableView12.grd
    26/01/2017  08:33             3.913 1203_85cxgrdbtblvwGrid3DBTableView1.grd
    26/01/2017  08:33             5.772 1203_85cxGrid1DBTableView1.grd
    26/01/2017  08:33             4.102 1203_85cxGrid2DBTableView1.grd
    26/01/2017  08:33             1.157 1203_85cxGrid4DBTableView1.grd
    25/10/2016  09:35             1.510 PCSIS151_85cxGridDBTableView2.grd
    25/10/2016  09:35             1.328 PCSIS151_85cxGridDBTableView3.grd
    16/01/2017  09:17                72 PCSIS152_85.ini
    17/12/2015  15:58                28 PCSIS157_85.ini
    13/06/2016  14:53                30 PCSIS163_85.ini
    07/03/2016  18:32                30 PCSIS1801_85.ini
    25/11/2015  11:36                93 PCSIS1803_85.ini
    26/11/2015  10:59                94 PCSIS1804_85.ini
    25/11/2015  11:34                61 PCSIS1806_85.ini
    08/03/2016  11:53                30 PCSIS1809_85.ini
    20/10/2015  14:46                61 PCSIS1812_85.ini
    25/11/2015  11:19                30 PCSIS1823_85.ini

    */

    -- Execute o comando no cmd:

    ren *_85* *_86*

    -- ou

    copy *_85* *_86*

    -- Resultado:

    /*

    Pasta de C:\WinThor\SPOOL\TESTE

    26/01/2017  09:38    <DIR>          .
    26/01/2017  09:38    <DIR>          ..
    08/09/2016  10:22             3.325 101_86cxGrid1DBTableView1.grd
    08/09/2016  10:22             1.476 101_86cxGridDBTableView1.grd
    08/09/2016  10:22             2.022 101_86cxGridDBTableView2.grd
    19/10/2016  14:36               180 104_86.ini
    19/10/2016  14:36             7.716 104_86tblFalta.grd
    02/09/2016  11:41             8.590 105_86cxGridDBTableView1.grd
    24/01/2017  10:29             5.837 1103_86vwListaMovimentacoes.grd
    28/09/2015  19:24             2.975 1106_86tvBonus.grd
    28/09/2015  19:24             2.727 1106_86tvNotasEntrada.grd
    28/09/2015  19:24             4.406 1106_86tvProdutos.grd
    30/03/2016  16:51             7.075 1107_86tvEst.grd
    23/11/2016  16:55             1.872 1118_86cxGridDBTableView1.grd
    23/11/2016  16:55             2.116 1118_86tvAjuste.grd
    23/11/2016  16:55               575 1118_86tvAvulsa.grd
    29/07/2016  10:50             1.636 117_86tblVale.grd
    26/01/2017  08:33             2.369 1203_86cxgrdbtblvwGrid2DBTableView1.grd
    26/01/2017  08:33             3.538 1203_86cxgrdbtblvwGrid2DBTableView12.grd
    26/01/2017  08:33             3.913 1203_86cxgrdbtblvwGrid3DBTableView1.grd
    26/01/2017  08:33             5.772 1203_86cxGrid1DBTableView1.grd
    26/01/2017  08:33             4.102 1203_86cxGrid2DBTableView1.grd
    26/01/2017  08:33             1.157 1203_86cxGrid4DBTableView1.grd
    25/10/2016  09:35             1.510 PCSIS151_86cxGridDBTableView2.grd
    25/10/2016  09:35             1.328 PCSIS151_86cxGridDBTableView3.grd
    16/01/2017  09:17                72 PCSIS152_86.ini
    17/12/2015  15:58                28 PCSIS157_86.ini
    13/06/2016  14:53                30 PCSIS163_86.ini
    07/03/2016  18:32                30 PCSIS1801_86.ini
    25/11/2015  11:36                93 PCSIS1803_86.ini
    26/11/2015  10:59                94 PCSIS1804_86.ini
    25/11/2015  11:34                61 PCSIS1806_86.ini
    08/03/2016  11:53                30 PCSIS1809_86.ini
    20/10/2015  14:46                61 PCSIS1812_86.ini
    25/11/2015  11:19                30 PCSIS1823_86.ini

    */

    -- Mais simples que isso eu não sei.

    -- Melhor que isso... só dois disso... hehehe.

    -- RibertoBraz

    quinta-feira, 26 de janeiro de 2017 11:45
  • Seus comandos em RENAME são muito bons. Aprendi novas variações do comando REN, pelos exemplos mostrados acima.

    Por favor, estou precisando acrescentar, na renomeação,  um "prefixo" no inicio de cada arquivo, por exemplo : " O nome da empresa", no inicio de cada arquivo, quando for renomear.

    Exemplo :

    planilha-2016-03-01.xml

    planilha-2016-04-02.xml

    planilha-2016-05-01.xml

    RENOMEAR PARA

    "nome da empresa"-planilha-2016-03-01.xml

    "nome da empresa"-planilha-2016-04-02.xml

    "nome da empresa"-planilha-2016-05-01.xml

    Por favor, pela linha de comando do comando REN, como posso renomear estes arquivo, acrescentado algo na frente deles ???

    Obrigado!

    sexta-feira, 17 de fevereiro de 2017 11:24
  • Gente como eu faço pra renomear usando o @fdate?
    Eu fiz assim: 

    forfiles /c "cmd /c rename @path @fname_@fdate.@ext"

    só que não funciona pelo fato de o @fdate trazer valores com barras (xx/xx/xxxx) e não da pra nomear arquivos com eles :/ Alguém teria alguma solução pra conseguir retornar os valores do @fdate sem as barras?


    sábado, 18 de fevereiro de 2017 05:20
  • E ai LEKA BLZ... lembra dos amigos?.... Henrique - Técnico que ficava na CECIL na época do CORPFlex.. Irmao do Fernando... Preciso de uma ajuda nesse assunto que vc postou.. se puder dá um toque no email: henlofer hotmail com valew.
    quinta-feira, 3 de agosto de 2017 13:01
  • Desculpe a falta de experiência mas preciso saber exatamente como renomear todos os arquivos de um diretório incluindo um "prefixo" como no caso acima: "nome da empresa"-planilha-2016-03-01.xml

    Qual seria exatamente o comando para incluir, por exemplo, o sufixo "JIMI" no início de todos os nomes dos arquivos do diretório "C:\Users\Sergio\Documents\@@C MUSICA", e onde executo esse comando?

    Obrigado

    sábado, 10 de fevereiro de 2018 14:20