sexta-feira, 3 de dezembro de 2010

.bat para renomear arquivos com a data atual

Semana passada precisei dar uma volta ao "Túnel do tempo", depois de jogar Quake, Duke Nukem 3d, e alguns outros clássicos de 32 e 16 bits, nunca pensei que voltaria ao velho DOS, mas enfim, eu estava errado, e nestes três típicos colocarei algumas dicas que você pode precisar um dia =)

Me deparei com a seguinte situação, utilizando a ferramenta nativa de Backup do windows server 2003, ntbackup, diariamente criamos os backup's dos servidores, bastando apenas que uma pessoa no período noturno renomeie os mesmos com a data que ele foi feito, o problema é que aos finais de semana ninguém está disponível para executar esta tarefa, e também, caso o funcionário do período noturno falte, o backup simplesmente substitui o arquivo, para resolver isso dei uma pesquisada e descobri como renomear automaticamente através de um arquivo.bat

Para renomear automaticamente arquivos no Windows Server 2003

setlocal enabledelayedexpansion
for /f "tokens=2 delims= " %%a in ('date /t') do set date=%%a
set date=%date:/=-%
ren teste.txt teste-%date%.txt

Para renomear automaticamente arquivos no Windows XP

@echo off&setlocal enabledelayedexpansion
for /f "tokens=2 delims= " %%a in ('date /t') do set data=%%a
set data=%data:/=-%
ren teste.txt teste-%data%.txt

O porque da diferença, no meu caso, a data do servidor estava em inglês, e devido a aplicações como SQL server e Servidor Apache, preferi não arriscar mudar as configurações regionais.

Salve o que você preferir em um arquivo .bat, e agende no gerenciador de tarefas.

O resultado ao executar o arquivo .bat será teste-03-12-2010.txt  no caso de ele ser executado hoje

Lembrando que o arquivo deverá estar na mesma pasta do arquivo, ou então adicione um comando no inicio do arquivo para executá-lo a partir de outra pasta, ex

cd c:/pasta/pasta

9 comentários:

  1. Apenas um detalhe, estou fazendo este comando no win XP e copiando a linha:

    for /f "tokens=2 delims= " %%a in ('date /t') do set data=%%a
    set data=%data:/=-%
    ren xxx.txt xxx-%data%.txt

    aqui deu erro de sintaxe, então substitui tudo para date e funcionou...
    obrigado

    ResponderExcluir
  2. Fibra,

    Obrigado, não tinha percebido isso, o script do XP funciona aqui para mim, mas parece que é porque o meu sistema é em português, e no servidor o "date" funcionou porque ele é inglês, e não por causa do sistema em sí.

    ResponderExcluir
  3. Olá, tenho uma situação parecia e gostaria de saber se pode me ajudar. Tenho um arquivo que é gerado dentro de uma pasta sempre que um usuario do meu sistema dispara um processo. Este arquivo é importado diariamente pelo operador noturno para outro sistema, porem existem casos em que é necessaria a geraçao deste arquivo mais de uma vez por dia e o sistema sobreescreve o arquivo anterior sempre que é gerado um novo arquivo. Assim preciso de um batch que renomeie os arquivos sequencialmente, por exemplo, arquivo001.txt, arquivo002.txt, arquivo003.txt e assim sucessivamente. Este batch seria disparado por uma tarefa agendada a cada 5 minutos durante o dia, ou melhor ainda se pudesse ficar ativo o tempo todo no servidor monitorando a pasta de destino e renomeando os arquivos conforme fossem gerados. Enfim se puder me ajudar ficarei grato. Att Marco Aurelio.

    ResponderExcluir
  4. Marco,

    Estou meio sem tempo, mas veja o que eu consegui
    Pensei em criar um arquivo chamado VARIAVEL.TXT que armazenaria a variável do numero, ele começaria com o conteúdo 1

    Teríamos também um arquivo DOS com os seguintes comandos.

    set /p var= variavel.txt

    Linha 1 - onde ele lê o arquivo VARIAVEL.TXT e armazena o conteúdo na variável "var"

    Linha 2 - Renomeia o arquivo
    Linha 3 - Cria a variável "nova" que é a "var"+1

    Linha 4 - [aí só funcionou no prompt, no .bat não], o que acho necessário...

    um comando que resulte no valor da variável "nova" assim podemos substituir a atual, desta forma funciona apenas no prompt, mas quando tentei fazer com o arquivo .bat dentro do arquivo fica o numero, e depois um espaço

    Ou temos que achar um jeito de criar esse arquivo sem espaços.
    Ou um comando para eliminar o espaço ao ler o arquivo.

    Acho que o segundo é mais fácil. se achar poste aqui, e eu achar também postarei.


    Obrigado

    ResponderExcluir
  5. Como o blog não exibe os comandos , tive que criar um tópico para colocar como foto, está aqui:

    http://edsonredes.blogspot.com/2011/02/renomear-arquivo-sequencialmente-com.html

    obrigado!

    ResponderExcluir
  6. OLá pessoal fiz pra colocar data e hora... mas deu erro pq aparece uma Virgulazinha...do mal...

    pause

    for /f "tokens=2 delims= " %%a in ('date /t') do set data=%%a
    for /f "tokens=2 delims= " %%a in ('time /t') do set time=%%a


    pause

    set data=%date:/= %
    set Time=%time:/=:%

    pause

    ren xxx.txt xxx-%data%-%TIME%.txt

    pause

    ResponderExcluir
  7. Funcionando no Windows 11

    setlocal enabledelayedexpansion
    for /f "tokens=2 delims= " %%a in ('date /t') do set date=%%a
    set date=%date:/=-%
    ren teste.txt teste-%date%.txt

    ResponderExcluir
  8. Muito obrigado meu nobre, funcionou bem para o que queria fazer.
    Ass. Antonio AMazonas

    ResponderExcluir

Deixe aqui o seu comentário

facebook

Postagens populares