Manipular arquivo nomeado por data em BAT
25/01/2015
0
Explicando a situação:
Todos os dias eu gero arquivos de atualização e o software que faz isso usa a data(dia e mês) do sistema para nomear os arquivos.
ex: NOME2501.txt
Porém os arquivos são gerados com a data de vigência sendo o próximo dia, ou seja, se eu gerar os arquivos de atualização hoje(25/01) o arquivo será gerado com o nome de "NOME2601.txt"
O que eu preciso é pegar esse arquivo, copiar para uma pasta e renomear.
Com a data do dia atual, eu consigo fazer isso utilizando essa linha:
" NOME%date:~0,2%%date:~3,2%.txt "
O que eu preciso é somar 1 dia nessa variável date, como eu poderia fazer isso?
E levando em conta que ao gerar o arquivo no dia 28/02, por exemplo, a bate consiga puxar o arquivo pelo nome de "NOME0103.txt" e não "NOME2902.txt"
Desde já agradeço!
Augusto
Post mais votado
27/01/2015
Utilizo um backup via arquivo de lote parecido com o que você precisa.
Fui caçando no orácugoogle e consegui o que precisava, mas sinceramente não sei detalhar o que cada passo do script faz.
Um detalhe: eu pego a data referente ao dia anterior. Como você precisa do dia posterior, acredito que seja só mudar a linha "set qty=-1" para "set qty=1"
Dá uma fuçada se te ajuda.
@echo off REM INICIO PARA PEGAR A DATA DE ONTEM set date1=today set qty=-1 set separator=%~3 if /i "%date1%" EQU "TODAY" (set date1=now) else (set date1="%date1%") echo >"%temp%\%~n0.vbs" s=DateAdd("d",%qty%,%date1%) echo>>"%temp%\%~n0.vbs" d=weekday(s) echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^&_ echo>>"%temp%\%~n0.vbs" right(100+month(s),2)^&_ echo>>"%temp%\%~n0.vbs" right(100+day(s),2)^&_ echo>>"%temp%\%~n0.vbs" d for /f %%a in ('cscript //nologo "%temp%\%~n0.vbs"') do set result=%%a del "%temp%\%~n0.vbs" endlocal& ( set "YY=%result:~0,4%" set "MM=%result:~4,2%" set "DD=%result:~6,2%" set "daynum=%result:~-1%" ) if %daynum% EQU 1 set "weekday=Sunday" if %daynum% EQU 2 set "weekday=Monday" if %daynum% EQU 3 set "weekday=Tuesday" if %daynum% EQU 4 set "weekday=Wednesday" if %daynum% EQU 5 set "weekday=Thursday" if %daynum% EQU 6 set "weekday=Friday" if %daynum% EQU 7 set "weekday=Saturday" REM echo %DD%%MM%%YY% REM FIM PARA PEGAR A DATA DE ONTEM IF NOT EXIST \\192.1.1.9\backup\arquivo%DD%%MM%%YY%.bkp GOTO FIM xcopy \\192.1.1.9\backup\arquivo%DD%%MM%%YY%.bkp H:\BACKUP\ /C /Y /I :FIM
Renato Rubinho
Mais Posts
25/01/2015
Carlos Bernardo
25/01/2015
Augusto
Não, não estou utilizando Delphi.
Preciso mover e renomear o arquivo.
Pensei numa outra possível forma que seria, alterar a data do sistema, depois mover e renomear e depois voltar a hora do sistema, mas assim é menos prático e passível de falhas em outros aspectos.
A forma descrita no post seria a mais viável.(Eu acho)
Fucei esse tal de Google de cima pra baixo e vice versa, mas não encontrei nada.
26/01/2015
Alex Lekao
Desculpe, isso se trata de algum tipo de backup?
Caso seja, seria interssante utilizar ferramentas de backup como o cobian que ja faz esse tipo de operacao automatizadamente.
26/01/2015
Augusto
Desculpe, isso se trata de algum tipo de backup?
Caso seja, seria interssante utilizar ferramentas de backup como o cobian que ja faz esse tipo de operacao automatizadamente.
Boa tarde Alex, na verdade, também possui backup, mas essa parte é mais simples.
Como gero esses arquivos todos os dias, eu transfiro os do dia anterior para a pasta de backup no servidor, antes de colar os arquivos atualizados na pasta.
É uma rotina, entende?!
Testo se já tem arquivos na pasta X, se sim, jogo eles na pasta bkp, depois colo os arquivos atuais e os renomeio, se não só os colo e renomeio.
27/01/2015
Alex Lekao
O cobian tem uma estrutura bem interessante com relacao e copias, seguinte o principio do backup mesmo, diferencial, incremental, essas coisas.
Ele tambem cria separadamente por data, nao sendo necessario vc mover para outro lugar etc.
Ele tambem trabalha com copias alternativas, enviando os arquivos para outro lugar na rede ou na web.
27/01/2015
Carlos Oliveira
28/01/2015
Alex Lekao
22/03/2015
Augusto
Garrei num problema bobo aqui cara, se puder me dar uma auxílio.
O que acontece, o software que executa a batch, chama ela mais de uma vez durante o processo de importação dos arquivos.
Quando o software começa o processo de importação ele chama a batch e copia 4 arquivos e os renomeia dentro de uma pasta X.
Quando ele termina de importar o primeiro, ele chama a batch de novo e copia outra vez esses arquivos.
As vezes no meio do processo o software não encontra o arquivo.
Sendo assim, preciso criar uma condição, se caso o arquivo já existir, ele não copiar de novo.
Como seria o if exist nesse caso?
att,
23/03/2015
Renato Rubinho
Segue um exemplo.
Se o arquivo existe, o "GOTO FIM" mandará continuar a partir da linha ":FIM". Não executará nada posterior à linha atual, dando sequência na linha ":FIM", caso tenha outras coisas desta linha em diante.
IF EXIST \192.1.1.9\backup\arquivo%DD%%MM%%YY%.bkp GOTO FIM xcopy \192.1.1.9\backup\arquivo%DD%%MM%%YY%.bkp H:\BACKUP\ /C /Y /I :FIM
23/04/2015
Augusto
Mas ainda preciso de uma forma de pegar o arquivo com data de amanhã. Essa parte tá complicada.
Temporariamente estou fazendo a batch me pedir pra mudar a data , com o comando date, aí eu altero a data pro dia seguinte, ele copia e renomeia os arquivos para os servidores respectivos e depois mando o date de novo para voltar com a data atual, mas isso ainda é um trabalho que não queria ter, de ter que fazer algo manualmente, tem que ser tudo automático, sem interação do usuário.
24/04/2015
Alex Lekao
de uma pesquisada sobre o robocopy ele tem mais opcoes que o copy comum.
Abraco.
Clique aqui para fazer login e interagir na Comunidade :)