Manipular arquivo nomeado por data em BAT
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!
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
Curtidas 0
Melhor post
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.
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
25/01/2015
Acompanhando.
GOSTEI 0
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
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.
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
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.
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
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.
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
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.
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
25/01/2015
Não lembro bem, esse cobian é gratuito, backup de tudo?
GOSTEI 0
Alex Lekao
25/01/2015
sim, eh gratuito.
Não lembro bem, esse cobian é gratuito, backup de tudo?
GOSTEI 0
Carlos Oliveira
25/01/2015
Valeu Alex.
GOSTEI 0
Alex Lekao
25/01/2015
FMZ!!!
GOSTEI 0
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,
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
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.
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
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.
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
25/01/2015
ola bom dia!!!
de uma pesquisada sobre o robocopy ele tem mais opcoes que o copy comum.
Abraco.
de uma pesquisada sobre o robocopy ele tem mais opcoes que o copy comum.
Abraco.
GOSTEI 0
Carlos Oliveira
25/01/2015
Faz parte do Windows ou é "externo" Alex?
GOSTEI 0
Alex Lekao
25/01/2015
sim, faz parte.
se nao estou enganado a partir do win7 que tem.
se nao estou enganado a partir do win7 que tem.
GOSTEI 0
Carlos Oliveira
25/01/2015
Desconhecia, achei!!
[url]https://technet.microsoft.com/pt-br/library/cc733145%28v=ws.10%29.aspx[/url]
[url]https://technet.microsoft.com/pt-br/library/cc733145%28v=ws.10%29.aspx[/url]
GOSTEI 0
Alex Lekao
25/01/2015
blz.
ele tem bastante funcionalidades, acredito que seja uma boa pedida.
abraco.
ele tem bastante funcionalidades, acredito que seja uma boa pedida.
abraco.
GOSTEI 0
Carlos Oliveira
25/01/2015
Bastante!!! Show,
GOSTEI 0
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
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"
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
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"
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
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
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"
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
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"
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