Manipular arquivo nomeado por data em BAT

Automação Comercial

Modelagem

Off Topic

25/01/2015

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

Curtidas 0

Melhor post

Renato Rubinho

Renato Rubinho

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
GOSTEI 1

Mais Respostas

Carlos Oliveira

Carlos Oliveira

25/01/2015

Acompanhando.
GOSTEI 0
Carlos Bernardo

Carlos Bernardo

25/01/2015

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

Augusto

25/01/2015

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

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.
GOSTEI 0
Augusto

Augusto

25/01/2015

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

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.
GOSTEI 0
Carlos Oliveira

Carlos Oliveira

25/01/2015

Não lembro bem, esse cobian é gratuito, backup de tudo?
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

sim, eh gratuito.

Não lembro bem, esse cobian é gratuito, backup de tudo?
GOSTEI 0
Carlos Oliveira

Carlos Oliveira

25/01/2015

Valeu Alex.
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

FMZ!!!
GOSTEI 0
Augusto

Augusto

25/01/2015

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,
GOSTEI 0
Renato Rubinho

Renato Rubinho

25/01/2015

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
GOSTEI 0
Augusto

Augusto

25/01/2015

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.
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

ola bom dia!!!

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

Abraco.
GOSTEI 0
Carlos Oliveira

Carlos Oliveira

25/01/2015

Faz parte do Windows ou é "externo" Alex?
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

sim, faz parte.

se nao estou enganado a partir do win7 que tem.
GOSTEI 0
Carlos Oliveira

Carlos Oliveira

25/01/2015

Desconhecia, achei!!

[url]https://technet.microsoft.com/pt-br/library/cc733145%28v=ws.10%29.aspx[/url]
GOSTEI 0
Alex Lekao

Alex Lekao

25/01/2015

blz.

ele tem bastante funcionalidades, acredito que seja uma boa pedida.

abraco.
GOSTEI 0
Carlos Oliveira

Carlos Oliveira

25/01/2015

Bastante!!! Show,
GOSTEI 0
Augusto

Augusto

25/01/2015

Alguém poderia me auxiliar na utilização do comando DateAdd, para adicionar um dia na variável %date% ?
GOSTEI 0
Renato Rubinho

Renato Rubinho

25/01/2015

Augusto,

Como eu disse, fiz esse script no copiar / colar + alguns ajustes... rsrs
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"

@echo off
REM INICIO PARA PEGAR A DATA DE ONTEM
 
set date1=today
set qty=-1                    <<<<< acho que para adicionar um dia é só mudar esta variável para 1           " -1 " traz ontem " 1 " deve trazer amanhã
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)
GOSTEI 0
Augusto

Augusto

25/01/2015

Consegui de uma forma simples resolver o que eu precisava.

Lógica simples de programação:

Setei duas variáveis:
set dia=%date:~0,2%
set mes=%date:~3,2%

onde o dia tem o valor dos dois dígitos do dia no relógio do sistema;
onde o mês tem o valor dos dois dígitos do mês no sistema;

Depois fiz a variável dia receber o seu próprio valor mais 1 e escrevi a variável;

set /a dia=dia+1
echo %dia%

Usando como exemplo hoje ficaria assim:

Dia = 20
Mes = 06

Dia = 06+1

Dia = 7

agora me falta essa questão:

Ao gerar o arquivo no dia 28/02, por exemplo, a bat consiga puxar o arquivo pelo nome de "NOME0103.txt" e não "NOME2902.txt"
GOSTEI 0
Carlos Souza

Carlos Souza

25/01/2015

rrubinho muito obrigado cara, tenho de fazer backup de uma pasta na rede que é criada com a data do dia, o problema é que só posso fazer o backup no dia seguinte, utilizei seu script, retirei o que não me interessava e fiquei com a parte que retorna a data anterior, como dizem alguns amigos " Fechou que nem boca de banguelo.". Muito obrigado a todos, aprendi muito neste fórum hoje.
GOSTEI 1
Carlos Souza

Carlos Souza

25/01/2015

Muito bom!!!

Augusto,

Como eu disse, fiz esse script no copiar / colar + alguns ajustes... rsrs
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"

@echo off
REM INICIO PARA PEGAR A DATA DE ONTEM
 
set date1=today
set qty=-1                    <<<<< acho que para adicionar um dia é só mudar esta variável para 1           " -1 " traz ontem " 1 " deve trazer amanhã
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)
GOSTEI 1
Carlos Souza

Carlos Souza

25/01/2015

Muito bom!!!

Augusto,

Como eu disse, fiz esse script no copiar / colar + alguns ajustes... rsrs
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"

@echo off
REM INICIO PARA PEGAR A DATA DE ONTEM
 
set date1=today
set qty=-1                    <<<<< acho que para adicionar um dia é só mudar esta variável para 1           " -1 " traz ontem " 1 " deve trazer amanhã
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)
GOSTEI 0
POSTAR