quinta-feira, 24 de fevereiro de 2011

Renomear arquivo sequencialmente com .bat

Este tópico surgiu a partir de uma necessidade de um leitor.


"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."


Não sei se existe um jeito de guardar uma variável no próprio sistema, então pensei em guardá-la em um TXT, e através do .BAT ler esse arquivo e incrementar o valor da variável. Depois um outro Bat ao final do dia Escreveria novamente o valor 1 neste arquivo.


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.



Linha 1 - Onde ele lê o arquivo VARIAVEL.TXT e armazena o conteúdo na variável "var"
Linha 2 - Elimina os espaços na variável(não sei porque, mas quando ele lê o arquivo, adiciona um espaço no final e atrapalha a segunda execução do arquivo.
Linha 3 - Renomeia o arquivo
Linha 4 - Cria a variável "nova" que é a "var"+1
Linha 5 - Imprime a variável na tela e escreve ela no arquivo.

Bem, mas creio que até o momento só vai funcionar se existir o arquivo TESTE.TXT, caso não exista o arquivo com este nome, ocorrerá um erro e o BAT deixará de ser executado na linha 3.


E também para voltar a contagem para um, um outro BAT pode substituir esse arquivo pelo arquivo com o texto 1, com um comando.


copy 1.txt variavel.txt


 Qualquer dúvida estamos aqui !

11 comentários:

  1. Olá Edson,

    Muito obrigado pela ajuda, fiz alguns testes e acho que este espaço que ele esta inserindo na verdade é porque o conteudo da variavel é de um tipo diferente, ou seja, na verdade nao é um espaço que é inserido e sim um endereço de memória, visto se tratarem de tipos diferentes. Bom posso estar falando uma grande besteira, mas achei em alguns foruns que para fazer esse tipo de comando é preciso converter o conteudo da variavel para depois renomear o arquivo. Bom nao sei, vou continuar pesquisando e se achar alguma coisa posto aqui. Agradeço novamente a ajuda!

    ResponderExcluir
  2. Como ele insere um espaço depois da variável, podemos deixar ele inserir ^^, depois é só tirar depois de ler o arquivo =) (linha 2)

    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Nao abusando mas já abusando, preciso que seja uma pouco mais elaborado o processo.

    É o seguinte: Preciso que o BAT procure dentro da pasta qualquer arquivo com a extensao TXT por exemplo, e leia o nome deste arquivo e o renomeie para o nome antigo mais a variavel. Conseguiu entender? Ficaria alguma coisa assim. nomeantigo.txt - nomedoantigo1.txt

    Agradeço por antecipaçao!!!

    ResponderExcluir
  5. Esse arquivo depois de renomeado (nomedoantigo1.txt) pode ser movido para outra pasta ?

    Se sim, creio que basta entrar na pasta

    cd c:\pasta\pasta

    Listar os arquivos txt e jogá-los para dentro de um arquivo.

    dir *.txt > arquivos.txt

    depois ler cada linha renomeando com as 3 primeiras linhas do código que já escreví mas movendo os arquivos para uma outra pasta (se não na próxima execução serão renomeados novamente).

    Depois, executar as duas ultimas linhas do código atual para incrementar a variável...

    Lembrando que o arquivo da variável e dos textos deverão estar em outra pasta ou com uma extensão diferente de TXT, afinal todos os TXT serão renomeados.

    Tenho de entregar hoje minha monografia, então tente aí, sexta tento implementar se vc tiver alguma dificuldade.

    Obrigado pelos comentários !

    ResponderExcluir
  6. Consegui implementar e para ficar perfeito a unica coisa que preciso é que ele nao incremente a variavel quando nao houver o arquivo na pasta para ser renomeado. Como vou programar uma tarefa agendada de 5 em 5 min para a execução do BAT ele está incrementando a variavel mesmo sem renomear o arquivo. Isso no final das contas quando ele deve realmente renomear está me gerando arquivos nao sequenciais.

    Bom lhe desejo boa sorte com sua monografia sei o quanto é barra ja passei por isso rsrsrs, quando encontrar a soluçao posto novamente e posso lhe enviar o arquivo BAT final quando completá-lo.

    Obrigado por tudo.

    ResponderExcluir
  7. Como faço para ler apenas os 10 primeiros caracteres na 4 linha dentro de um arquivo .txt a partir de um bat?

    ResponderExcluir
  8. Ola td bem Edson ?
    cara estou com o seguinte problema na empre que trabalho agente usa um programa para Engenharia chamado CREO, porém esse software não salva as extenções do arquivos com pontos no meio do código dos itens. Ex(011 206-3 essa maneira não atende a nós) deveria ser assim Ex(001.206-3.dwg assim supreria a nossa nescessidade) porque esse codigo são passados para o pessoal da Laser pode cortar as peças solicitadas a partir do codigo! Então eu precisaria fazer um script para fazer isso de forma automática porque fazer manual consumiria muito tempo! acho que não deve ser muito dificil fazer BAT para isso mais gostaria si possível você me ajudaria ! Obrigado.

    ResponderExcluir
  9. Marcos,


    Estes arquivos serão sempre salvos na mesma pasta?

    ResponderExcluir
  10. Ai no caso eu precisaria fazer um BAT, e agendar no windows que a cada 5 min.
    ele monitora essa pasta, e ver si existe arquivos sem os formatos programados no BAT, si existir ele já atualiza de forma automática ! Obrigado pela atenção.

    ResponderExcluir

Deixe aqui o seu comentário

facebook

Postagens populares