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

@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

Postado

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

Postado

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

@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

 

Postado

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"

 

  • 2 semanas depois...
Postado

@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

 

Postado
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

Postado

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'"
                                                                                       )
                                                                         )

 

Postado

@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

Postado

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

Postado

@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

 

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!