Ir ao conteúdo

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


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

Posts recomendados

Postado

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*

 

Postado

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

Postado

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?

Postado

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

 

Postado

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

 

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

 

Postado

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

 

Postado
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

 

Postado

É 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 

 

Postado
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

 

Postado

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

 

 

  • 4 semanas depois...
Postado
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.

Postado

@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
 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!