Manipular arquivo nomeado por data em BAT

25/01/2015

0

Bom dia senhores,

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

Augusto

Responder

Post mais votado

27/01/2015

Augusto,

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

Renato Rubinho
Responder

Mais Posts

25/01/2015

Carlos Oliveira

Acompanhando.
Responder

25/01/2015

Carlos Bernardo

Amigo, o nome do arquivo precisa ser sempre a data atual + 1 ? Voce esta utilizando o Delphi? Ou voce precisa renomear esse arquivo?
Responder

25/01/2015

Augusto

Exato, o nome do arquivo é sempre a data atual + 1.

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

26/01/2015

Alex Lekao

Ola Boa tarde!!

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

26/01/2015

Augusto

Ola Boa tarde!!

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

27/01/2015

Alex Lekao

entendi.

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

27/01/2015

Carlos Oliveira

Não lembro bem, esse cobian é gratuito, backup de tudo?
Responder

28/01/2015

Alex Lekao

sim, eh gratuito.

Não lembro bem, esse cobian é gratuito, backup de tudo?
Responder

28/01/2015

Carlos Oliveira

Valeu Alex.
Responder

29/01/2015

Alex Lekao

FMZ!!!
Responder

22/03/2015

Augusto

Alex, bom dia!


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,
Responder

23/03/2015

Renato Rubinho

Buenas,

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
Responder

23/04/2015

Augusto

Valeu Rubinho, na verdade eu já tinha solucionado esse problema com o IF ELSE, mas de toda forma, obrigado. Posso utilizar o goto tmb!

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

24/04/2015

Alex Lekao

ola bom dia!!!

de uma pesquisada sobre o robocopy ele tem mais opcoes que o copy comum.

Abraco.
Responder

24/04/2015

Carlos Oliveira

Faz parte do Windows ou é "externo" Alex?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar