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

@ricardo_brEntão mano, diariamente preciso criar esse arquivo txt com a data do dia.
Então por exemplo hj eu gero o arquivo com data de 21/09/2022 (sempre com duas linhas).
Amanhã gero com data de 22/09/2022.

Diariamente tenho que criar manualmente esse arquivo (menos sábado e domingo.
Estou te mandando um exemplo de como quero.

Tipo um comando pra gerar dia a dia isso.
Desculpa se não estou conseguindo ser claro.

@ricardo_bresqueci o arquivo

Data.txt

Link para o comentário
Compartilhar em outros sites

@ricardo_bropa, isso mesmo.
Mas queria citar dois pontos.

caso a data seja sem as barras, como faço:
De: 21/09/2022

Para: 21092022.

E não querendo abusar já abusando (kk).
Cara como eu conseguiria gerar esse cara hoje (21/09/2022) como a data de 19/09/2022, por exemplo?
Creio que terá que ser assim.
Cara, agradeço pela parceria. Tmj!

Link para o comentário
Compartilhar em outros sites

@Marcos Pereira Simões Para digitar em 2 linhas a data de 2 dias atrás, sem barras em um arquivo chamdo Data.txt correto?

 

@echo off

SetLocal EnableDelayedExpansion

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,2) 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!
                                                  )
                          )
echo !DiaAn!!MesAn!!AnoNu!>Data.txt
echo !DiaAN!!MesAn!!AnoNu!>>Data.txt

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

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@ricardo_brmonstro sagrado.
Obrigado mano!!!

@ricardo_brsó pra eu ficar familiarizado com o código.

Qual campo eu mudo aqui pra por exemplo gerar 20092022?

@ricardo_breu achei aqui.
Mas não entendi.
set /a DiaNu=!DiaNu!  (sem nada gera 21092022) ok
Mas assim.
set /a DiaNu=!DiaNu! -1 (com -1 gera 19092022 e não 20092022).

Link para o comentário
Compartilhar em outros sites

@Marcos Pereira Simões Seria só mudar o último número dentro do for ex:

Para a data de 2 dias atrás:

for /L %%a in (1,1,2)

A data de 4 dias atrás: 

for /L %%a in (1,1,4)

Para data de ontem:

for /L %%a in (1,1,1)

 

Porém eu achei uma forma mais simples de fazer isso usando powershell dentro do bat:

 

@echo off
Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>Data.txt
Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>>Data.txt

 

Explicando:

(get-date) = pega data atual

.adddays(-2) = adicionar dias, números negativos para datas anteriores

.tostring('ddMMyyyy') = format a data como você quer, quidado: MM=meses mm=minutos 

>Data.txt = apaga o que tem em Data.txt e salva a data de 2 dias atrás 

>>Data.txt = salva outra linha com a data de 2 dias atrás

 

Link para o comentário
Compartilhar em outros sites

@ricardo_br, bom dia amigo!
Cara substitui o que me mandou por isso:
echo !DiaAn!!MesAn!!AnoNu!>Data.txt
echo !DiaAN!!MesAn!!AnoNu!>>Data.txt
Deu certo!!
Mano, desculpa, tentei configurar um local destino, mas não funcionou...
Consegue me ajudar pela milésima vez?

Link para o comentário
Compartilhar em outros sites

Naquele bat grande nessa parte:

 

echo !DiaAn!!MesAn!!AnoNu!>>"c:\Meu local\Data.txt"
echo !DiaAN!!MesAn!!AnoNu!>>"c:\Meu Local\Data.txt"

 

 

no bat que usa powershell:

 

Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>"C:\Meu Local\Data.txt"
Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>>"C:\Meu Local\Data.txt"

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@ricardo_brme ajuda.
Cara, não sei porque meu código tá dando ruim.
Tô informando 3 dias de retroatividade e está gerando com data de 30/08...!!!??

ERP_LEAS_2022-08-30 TER.zip

 

@echo off

SetLocal EnableDelayedExpansion

set Fonte=C:\Cassiopae\Rel\
set Destino=C:\Cassiopae\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

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,3) 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" 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_LEAS_!AnoNu!-!MesAn!-!DiaAn! %Semana%.zip" *.SA* ACD*.* *.SC* RCD*.* *.LOG ALS*.*
:PulaZip

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

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 22/09/2022 às 11:53, ricardo_br disse:

Naquele bat grande nessa parte:

 

echo !DiaAn!!MesAn!!AnoNu!>>"c:\Meu local\Data.txt"
echo !DiaAN!!MesAn!!AnoNu!>>"c:\Meu Local\Data.txt"

 

 

no bat que usa powershell:

 

Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>"C:\Meu Local\Data.txt"
Powershell (get-date).adddays(-2).tostring('ddMMyyyy')>>"C:\Meu Local\Data.txt"

 

@ricardo_brboa tarde!
 

Meu camarada novamente, de novo e outra vez preciso de sua ajuda.
você me passou o código anexo e funciona de boas.
Porém me apareceu uma condição que eu queria ver se consegue me ajudar.

Eu rodo essa bat hoje e me cria um arquivo que chamo de data.txt com a data do dia anterior.
O problema é que quando gero na segunda (no caso hoje) dia 10/10/2022 a bat me gera o arquivo datas como 09/10/2022 nesse caso um domingo.
Tem alguma condição que possa ser adicionada para não considerar sábado e domingo?
No caso eu rodando hoje ele me traria a data de sexta-feira.
Ou seja, quando for somente sábado e domingo a bat faria esse tratamento de datas.

arquivo data.txt

Link para o comentário
Compartilhar em outros sites

veja se é isso:

 

@echo off
:: %%a = Numero Dia Semana: Domingo=0 Segunda=1 Terça=2 Quarta=3 Quinta=4 Sexta=5 Sábado=6
:: Explicando:
:: Se for Segunda subtrai 3 dias da data de hoje para pegar a data de sexta-feira
:: Se for Domingo subtrai 2 dias da data de hoje para pegar a data de sexta-feira
:: se for Qualquer outro dia subtrai 1 dia da data de hoje:
for /f "delims=" %%a in ('"powershell (get-date).dayofweek.value__"') do (
                                                                          if %%a EQU 1 (
                                                                                        Powershell -command "(get-date).adddays(-3).tostring('yyyyMMdd')>'C:\Teste\Data.txt'"
                                                                                        Powershell -command "(get-date).adddays(-3).tostring('yyyyMMdd')>>'C:\Teste\Data.txt'"
                                                                                       )
                                                                          if %%a EQU 0 (
                                                                                        Powershell -command "(get-date).adddays(-2).tostring('yyyyMMdd')>'C:\Teste\Data.txt'"
                                                                                        Powershell -command "(get-date).adddays(-2).tostring('yyyyMMdd')>>'C:\Teste\Data.txt'"
                                                                                       ) 
                                                                          if %%a GTR 1 (
                                                                                        Powershell -command "(get-date).adddays(-1).tostring('yyyyMMdd')>'C:\Teste\Data.txt'"
                                                                                        Powershell -command "(get-date).adddays(-1).tostring('yyyyMMdd')>>'C:\Teste\Data.txt'"
                                                                                       )
                                                                         )

 

Link para o comentário
Compartilhar em outros sites

@ricardo_brcara agradeço muito.
Não consigo testar na data de hoje né?

 

@ricardo_br
Meu amigo, me pedem coisas impossíveis aqui e não manjo muito.
Mas estou dando o crédito a você.

Anexo estou enviando um trecho de um arquivo CNAB (arquivo de cobrança de banco).
Na primeira linha, na posição 95 a 100 é a data do arquivo, no caso 071022 (07/10/2022).
Ai que vem o que me pediram.
É possível uma bat ler essa posição (95-100) e gerar um novo arquivo de data (igual ao que você me ajudou anteriormente) com a data formatada?
Ou seja, a bat ia ler 071022 e devolver no txt.


Data2.txt (nesse arquivo viria essas linhas)

 

20220710
20220710

 


Se for muito complicado, relaxa.

CNAB_TESTE.txt

Link para o comentário
Compartilhar em outros sites

@ricardo_br então no arquivo está com DDMMAA e preciso AAAAMMDD.

 


Meu amigo, me pedem coisas impossíveis aqui e não manjo muito.
Mas estou dando o crédito a você.

Anexo estou enviando um trecho de um arquivo CNAB (arquivo de cobrança de banco).
Na primeira linha, na posição 95 a 100 é a data do arquivo, no caso 071022 (07/10/2022).
Ai que vem o que me pediram.
É possível uma bat ler essa posição (95-100) e gerar um novo arquivo de data (igual ao que você me ajudou anteriormente) com a data formatada?
Ou seja, a bat ia ler 071022 e devolver no txt.


Data2.txt (nesse arquivo viria essas linhas)

 

20220710
20220710

 


Se for muito complicado, relaxa.

Link para o comentário
Compartilhar em outros sites

@Marcos Pereira Simões Ai o resultado deveria ser 20221007 não 20220710 correto?

 

@echo off

:: Aqui vai caminho para o arquivo onde esta a data na posição 95-100:
set Arquivo=%userprofile%\desktop\CNAB_TESTE.txt

:: Aqui vai o caminho para onde vai ser salvo 2x a data:
set ArquivoD=%userprofile%\desktop\data2.txt

:: Aqui ele salva a primeira linha do arquivo na variavel %Linha1%
for /f "delims=" %%a in ('type "%Arquivo%"') do set "Linha1=%%a"& goto :Proximo

:Proximo
:: Aqui ele salva a data no formato AAAAMMDD
:: A contagem começa 0 portanto 94=95 (dias) 96=97 (meses) 98=99 (ano)
set Data=20%Linha1:~98,2%%Linha1:~96,2%%Linha1:~94,2%

:: Salvando a data 2x em um arquivo:
>"%ArquivoD%" echo %Data%
>>"%ArquivoD%" echo %Data%
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!