Ir ao conteúdo
  • Cadastre-se

Bat Geração de arquivo via bat com data do dia anterior


Ir à solução Resolvido por Marcos Pereira Simões,

Posts recomendados

Prezados, 

preciso de uma ajuda.
Tenho a bat abaixo que gera o arquivo compactado com a data do dia.

Exemplo:
hoje gerei esse cara:
Rel 16-08-2022-12-244.zip

Mas os dados dele é do dia 15, como eu devo proceder pra gerar assim:

Rel 15-08-2022-12-244.zip

 

@echo off

set Fonte=C:\teste\Rel
set Destino=C:\teste\Rel\Nova pasta
set Seven=C:\Program Files\WinRAR\WinRAR.exe

for %%a in ("%Fonte%") do set "NFonte=%%~nxa"

Set "Data=%Date%-%Time:~0,5%"
set "Data=%Data:/=-%"
set "Data=%Data::=-2%"
set "Data=%Data: =0%
echo %Data%

pushd "%Fonte%"

"%Seven%" a -y -tzip "%Destino%\%NFonte% -d%Data%.zip" *.SA* *.00* *.SC*

 

Link para o comentário
Compartilhar em outros sites

@Marcos Pereira Simões :

Salvar só os dias em uma variável, remover zeros a esquerda se existir ex: 09 = 9, subtrair 1 dos dias, se o backup for feito no dia 1 você terá que verificar quantos dias o mês anterior tem (que não é igual para todos os meses e colocar o último dia daquele mês...Colocar o 0 de volta se for o caso...

Link para o comentário
Compartilhar em outros sites

Peço desculpas, mas não compreendi muito, até porque não manjo muito de fazer bat.
Essa bolei com a ajuda da internet.
Consegue usar meu código e adicionar isso que menciona?

@ricardo_br Peço desculpas, mas não compreendi muito, até porque não manjo muito de fazer bat.
Essa bolei com a ajuda da internet.
Consegue usar meu código e adicionar isso que menciona?

Link para o comentário
Compartilhar em outros sites

Ficaria algo assim:

 

@echo off

SetLocal EnableDelayedExpansion

set Fonte=C:\teste\Rel
set Destino=C:\teste\Rel\Nova pasta
set Seven=C:\Program Files\WinRAR\WinRAR.exe

for /f "skip=1 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" -v "sShortDate"') do set FormatoData=%%a

FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,2!"=="dd" set "PDias=%%a,2"
FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,2!"=="mm" set "PMeses=%%a,2"
FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,4!"=="yyyy" set "PAno=%%a,4"

set DataAtual=!Date:~%PAno%!!Date:~%PMeses%!!Date:~%PDias%!
set Ano=!Date:~%PAno%!
set Mes=!Date:~%PMeses%!
set Dia=!Date:~%PDias%!

:: MesNu e DiaNu são data do Mês e Dia sem 0 na frente

set /a MesNu=10000%Mes% %% 10000
set /a DiaNu=10000%Dia% %% 10000
set /a AnoNu=%Ano%

:: DiaAn é igual dia anterior

:: Para mudar a sequencia + - dias anteriores é só mudar no (1,1,7)
for /L %%a in (1,1,1) do (
                           IF !DiaNu! GTR 1 (
                                            set /a DiaNu=!DiaNu! - 1
                                            set DiaAn=0!DiaNu!
                                            set DiaAn=!DiaAn:~-2!
                                            set MesAn=0!MesNu!
                                            set MesAn=!MesAn:~-2!
                                           ) else (
                                                   set Contador=31
                                                   call :MesAnterior
                                                   set DiaAn=0!DiaNu!
                                                   set DiaAn=!DiaAn:~-2!
                                                   set MesAn=0!MesNu!
                                                   set MesAn=!MesAn:~-2!
                                                  )
                          )
pushd "%Fonte%"
"%Seven%" a -y "%Destino%\%NFonte% -d!AnoNu!-!MesAn!-!DiaAn!.zip" *.SA* *.00* *.SC*
Exit

:MesAnterior

IF !MesNu! EQU 1 (set MesNu=12& set /a AnoNu=!AnoNu! - 1) else (set /a MesNu-=1)

xcopy . temp /l /i /d:!MesNu!-!Contador!-!AnoNu! > nul 2>&1
IF /i !Errorlevel! EQU 0 (set DiaNu=!Contador!) else (Set /a Contador=!Contador!-1 & goto :MesAnterior)
goto :EOF

 

Link para o comentário
Compartilhar em outros sites

Algo assim:

 

@echo off

SetLocal EnableDelayedExpansion

set Fonte=C:\teste\Rel
set Destino=C:\teste\Rel\Nova pasta
set Seven=C:\Program Files\WinRAR\WinRAR.exe

for /f "skip=1 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" -v "sShortDate"') do set FormatoData=%%a

FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,2!"=="dd" set "PDias=%%a,2"
FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,2!"=="mm" set "PMeses=%%a,2"
FOR /L %%a in (0,1,6) do IF /I "!FormatoData:~%%a,4!"=="yyyy" set "PAno=%%a,4"

set DataAtual=!Date:~%PAno%!!Date:~%PMeses%!!Date:~%PDias%!
set Ano=!Date:~%PAno%!
set Mes=!Date:~%PMeses%!
set Dia=!Date:~%PDias%!

:: MesNu e DiaNu são data do Mês e Dia sem 0 na frente

set /a MesNu=10000%Mes% %% 10000
set /a DiaNu=10000%Dia% %% 10000
set /a AnoNu=%Ano%

:: DiaAn é igual dia anterior

:: Para mudar a sequencia + - dias anteriores é só mudar no (1,1,7)
for /L %%a in (1,1,1) do (
                           IF !DiaNu! GTR 1 (
                                            set /a DiaNu=!DiaNu! - 1
                                            set DiaAn=0!DiaNu!
                                            set DiaAn=!DiaAn:~-2!
                                            set MesAn=0!MesNu!
                                            set MesAn=!MesAn:~-2!
                                           ) else (
                                                   set Contador=31
                                                   call :MesAnterior
                                                   set DiaAn=0!DiaNu!
                                                   set DiaAn=!DiaAn:~-2!
                                                   set MesAn=0!MesNu!
                                                   set MesAn=!MesAn:~-2!
                                                  )
                          )
pushd "%Fonte%"
for /f "delims=" %%a in ('powershell ^(get-date !DiaAn!/!MesAn!/!AnoNu!^).DayOfWeek.value__') do set Semana=%%a

if "%Semana%"=="0" set Semana=DOM
if "%Semana%"=="1" set Semana=SEG
if "%Semana%"=="2" set Semana=TER
if "%Semana%"=="3" set Semana=QUA
if "%Semana%"=="4" set Semana=QUI
if "%Semana%"=="5" set Semana=SEX
if "%Semana%"=="6" set Semana=SAB

"%Seven%" a -y "%Destino%\%NFonte%!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" *.SA* *.00* *.SC*
Exit

:MesAnterior

IF !MesNu! EQU 1 (set MesNu=12& set /a AnoNu=!AnoNu! - 1) else (set /a MesNu-=1)

xcopy . temp /l /i /d:!MesNu!-!Contador!-!AnoNu! > nul 2>&1
IF /i !Errorlevel! EQU 0 (set DiaNu=!Contador!) else (Set /a Contador=!Contador!-1 & goto :MesAnterior)
goto :EOF

 

Link para o comentário
Compartilhar em outros sites

Em 19/08/2022 às 10:43, Marcos Pereira Simões disse:

@ricardo_brFala Ricardo, bom dia!
Cara, sei que já estou abusando, mas estava tentando uma forma de fazer com que essa bat não gerasse arquivo com data de sábado e domingo, ou seja, mesmo sendo diária, quando identificasse que seria fds não geraria.
Isso é possível?
Obrigado mais uma vez.

 

Link para o comentário
Compartilhar em outros sites

Desse jeito ele pula a parte de criar o arquivo comprimido se o dia anterior for sábado ou domingo:

 

if "%Semana%"=="0" goto :Fim
if "%Semana%"=="1" set Semana=SEG
if "%Semana%"=="2" set Semana=TER
if "%Semana%"=="3" set Semana=QUA
if "%Semana%"=="4" set Semana=QUI
if "%Semana%"=="5" set Semana=SEX
if "%Semana%"=="6" goto :Fim

"%Seven%" a -y "%Destino%\%NFonte%!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" *.SA* *.00* *.SC*
:Fim
Exit

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Marcos Pereira Simões disse:

@ricardo_br 

realmente não está gerando o arquivo com data de sab e dom, porém essa parte da deleção abaixo não está funcionando mais.

 

if "%Semana%"=="0" goto :Fim
if "%Semana%"=="1" set Semana=SEG
if "%Semana%"=="2" set Semana=TER
if "%Semana%"=="3" set Semana=QUA
if "%Semana%"=="4" set Semana=QUI
if "%Semana%"=="5" set Semana=SEX
if "%Semana%"=="6" goto :Fim

"%Seven%" a -y "%Destino%\%NFonte% ERP_CDC_!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" *.SA* ACD*.* *.SC* RCD*.* *.LOG

 

cd C:\teste\Rel
Del /f /s /q  *.SA* ACD*.* *.SC* RCD*.* *.LOG
cls
echo Operacao Terminada.
echo.
echo.
exit

Exit

 

Link para o comentário
Compartilhar em outros sites

É para deletar o backup original mesmo que não tenha sido gravado o arquivo zip?

Ai é só colocar para pular apenas a parte de criar zip:

 

if "%Semana%"=="0" goto :PulaZip
if "%Semana%"=="1" set Semana=SEG
if "%Semana%"=="2" set Semana=TER
if "%Semana%"=="3" set Semana=QUA
if "%Semana%"=="4" set Semana=QUI
if "%Semana%"=="5" set Semana=SEX
if "%Semana%"=="6" goto :PulaZip

"%Seven%" a -y "%Destino%\%NFonte% ERP_CDC_!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" *.SA* ACD*.* *.SC* RCD*.* *.LOG
:PulaZip

cd C:\teste\Rel
Del /f /s /q  *.SA* ACD*.* *.SC* RCD*.* *.LOG
cls
echo Operacao Terminada.
echo.
echo.
exit

Exit 

 

Link para o comentário
Compartilhar em outros sites

Em 18/08/2022 às 10:29, Marcos Pereira Simões disse:

@ricardo_brBom dia meu amigo!
Peço desculpas pelos constantes pedidos, você está me ajudando pra caramba.
Cara, é possível definir duas fontes distintas?
Tem a fonte abaixo e outra seria: C:\teste\

 

@echo off

SetLocal EnableDelayedExpansion

set Fonte=C:\teste\Rel\
set Destino=C:\teste\Rel\Arquivos_ERP\
set Seven=C:\Program Files\WinRAR\WinRAR.exe

for /f "skip=1 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" -v "sShortDate"') do set FormatoData=%%a

 

Link para o comentário
Compartilhar em outros sites

Sim é possível mais acho que no caso que você falou não é necessário porque uma fonte já inclui a outra:

C:\teste

C:\teste\Rel\

 

C:\teste já inclui Rel como subpasta.....

 

mais seria algo assim:


 

set Fonte1=c:\Pasta01

set Fonte2=c:\Pasta02

"%Seven%" a -y "%Destino%\%NFonte% ERP_CDC_!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" "%Fonte1%" "%Fonte2%" *.SA* ACD*.* *.SC* RCD*.* *.LOG

 

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...
Em 26/08/2022 às 17:07, Marcos Pereira Simões disse:

Cara, mais uma vez recorro a você.
É possível criar uma bat que gere pra mim um arquivo txt ou outra extensão com as seguintes informações:

Ex:

Arquivo:

Datas.txt

Conteúdo do arquivo:

 

21092022

21092022

 

Ou seja, um txt com duas linhas e nessas linhas seria a data (as datas sempre serão iguais) que eu informar na bat.

Link para o comentário
Compartilhar em outros sites

@Marcos Pereira Simões mais qual data seria essa a de hoje, ontem ou a do arquivo, e se for do arquivo quais dessas: criação, modificação, último acesso?

Veja se é isso:

 

@echo off
echo.
set /p "Data=Favor informe uma data: "
echo %Data%>>Data.txt
echo %Data%>>Data.txt
exit

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br seria basicamente assim:

o comando tem que gerar um txt, nesse haverá dois registros, por exemplo (a data é a mesma em ambas as linhas):

 

Linha 1: 21/09/2022

Linha 2: 21/09/2022

 

Como ficaria no seu código?


@echo

off echo.

set /p "Data=Favor informe uma data: "

echo %Data%>>Data.txt

echo %Data%>>Data.txt

exit
 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!