Ir ao conteúdo

Bat Como fazer o script ler que o usuário tem certa idade dependendo do dia inserido


Ir à solução Resolvido por ricardo_br,

Posts recomendados

Postado

Estou aprendendo batch e estou tentando montar um script que pega os dados inseridos e depois mostra na tela como se fosse um cadastro. Porém preciso que o prompt leia a data inserida pelo usuário e a partir dela mostre sua idade. Só consegui fazer ele interpretar isso baseado no mês e no ano, mas quando tento colocar uma condição do dia o script simplesmente fecha depois de inserir a idade. Poderiam me ajudar?

Segue minha linha de código (sem a tentativa de usar a condição de dia):

 

<CODE>

@echo off
    color 8E
    mode 80, 25

goto :name
   
:name
    echo Digite seu nome: 
    set /p nome=
    cls

    echo Digite seu sobrenome: 
    set /p sobrenome=
    cls
                                                                                
:age
    echo Digite sua data de nascimento: 
    set /p nasc=
    set /a ano=%date:~6,9%-%nasc:~6,9%
    if %date:~3,4% geq %nasc:~3,4% (
        set /a idade=%ano
        
    ) else (
        set /a idade=%ano%-1
    )
    
    cls
    
    if %idade% lss 18 (
        echo Precisas ter 18 anos ou mais para se cadastrar...
        pause>nul
        cls
        goto :age

    ) else (
        goto :pk
    )

:pk
    echo Digite seu CPF: 
    set /p cpf=
    cls

    echo ------------------------
    echo NOME: %nome% %sobrenome%
    echo ------------------------
    echo IDADE: %idade%
    echo ------------------------
    echo CPF: %cpf%
    echo ------------------------

pause>nul

 

image.png

Postado

Você está salvando a data de forma errada.

por exemplo se a data de hoje é 31/01/2022

%date:~3,4% seria igual a "01/2"

 

Para pegar os meses considerando o formato brasileiro de data dd/mm/aaaa

%date:~3,2% = Posição 3 e capturar 2 caracteres = 01

 

Para pegar o ano:

%date:~6,4% = Posição 6 e capturar 4 caracteres = 2022

 

Para pegar os dias:

%date:~0,2% = Posição 0 capturar 2 caracteres = 31

 

Uma ideia seria salvar MesDiaAtual e comparar com MesDiaNascimento

Por exemplo se Hoje 31/01/2022 e data de Nascimento igual 20/01/1990


 

MesDiaAtual=0131

MesDiaNascimento=0120

if "%MesDiaAtual%" GEQ "%MesDiaNasc%" (set /a idade=%ano%) else (set /a idade=%ano%-1)

 

Repare que nos meus testes obtenho uma idade de 32 anos usando data de nascimento "30/01/1990" e 31 anos para "01/02/1990"

 

3POdKXy.gif

 

 @echo off
    color 8E
    mode 80, 25

goto :name

:name
cls
    echo Digite seu nome: 
    set /p nome=
    cls

    echo Digite seu sobrenome: 
    set /p sobrenome=
    cls
                                                                                
:age
    echo Digite sua data de nascimento: (dd/mm/aaaa)
    set /p nasc=
    set /a ano=%date:~6,4%-%nasc:~6,4%
    set MesDiaAtual=%Date:~3,2%%Date:~0,2%
    set MesDiaNasc=%nasc:~3,2%%nasc:~0,2%

    if "%MesDiaAtual%" geq "%MesDiaNasc%" (set /a idade=%ano%) else (set /a idade=%ano%-1)
    
    cls
    
    if %idade% lss 18 (
        echo Precisas ter 18 anos ou mais para se cadastrar...
        pause>nul
        cls
        goto :age

    ) else (
        goto :pk
    )

:pk
    echo Digite seu CPF: (###.###.###-##)	
    set /p cpf=
    cls

    echo ------------------------
    echo NOME: %nome% %sobrenome%
    echo ------------------------
    echo IDADE: %idade%
    echo ------------------------
    echo CPF: %cpf%
    echo ------------------------

pause>nul
goto :name

 

  • Solução
Postado

Criando um simples banco de dados de clientes:

 

AtYvTm4.gif

 

Ele salva os dados dos clientes num arquivo chamdo Clientes.csv...

 

@echo off
    color 8E
    mode 80, 25

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"

:MenuPrincipal
set Opcao=
cls
echo.
echo  Menu Principal
echo.
echo  (C) Cadastrar Cliente
echo.
echo  (V) Ver Clientes
echo.
echo  (L) Localizar Cliente
echo.
echo  (D) Deletar Cadastro
echo.
set /p "Opcao=%BS% Opcao: "
IF /i "%Opcao%"=="v" goto :Ver
IF /i "%Opcao%"=="c" goto :Cadastrar
IF /i "%Opcao%"=="d" goto :Deletar
IF /i "%Opcao%"=="l" (goto :Localizar) else (goto :MenuPrincipal)


:Cadastrar
cls 
    set /p "nome=%BS% Digite seu nome: "
    cls
    set /p "sobrenome=%BS% Digite seu sobrenome: "
:age
    cls
    set /p "nasc=%BS% Digite sua data de nascimento: (dd/mm/aaaa): "
    set /a ano=%date:~6,4%-%nasc:~6,4%
    set MesDiaAtual=%Date:~3,2%%Date:~0,2%
    set MesDiaNasc=%nasc:~3,2%%nasc:~0,2%
    if "%MesDiaAtual%" GEQ "%MesDiaNasc%" (set /a idade=%ano%) else (set /a idade=%ano%-1)
    
    cls
    
    if %idade% lss 18 (
        echo Precisas ter 18 anos ou mais para se cadastrar...
        pause>nul
        cls
        goto :age

    ) else (
        goto :pk
    )

:pk
    echo Digite seu CPF: (###.###.###-##)	
    set /p cpf=
    cls

    echo ------------------------
    echo NOME: %nome% %sobrenome%
    echo ------------------------
    echo IDADE: %idade%
    echo ------------------------
    echo CPF: %cpf%
    echo ------------------------

pause>nul
>>Clientes.csv echo %nome%;%sobrenome%;%idade%;%cpf%;%nasc% 
goto :MenuPrincipal

:Ver
cls
echo.
echo  Lista de Clientes:
echo  ------------------

echo  Indice; Nome; Sobrenome; Idade; CPF; Data Nascimento
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /v /n ""') do echo  %%a; %%b; %%c; %%d; %%e; %%f
echo.
pause
goto :MenuPrincipal

:Localizar
set Pesquisar=
cls
echo.
echo  Digite o nome do cliente:
set /p "Pesquisar=%BS% Pesquisar: "
echo.
echo  Indice; Nome; Sobrenome; Idade; CPF; Data Nascimento
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /n /i "%Pesquisar%"') do echo  %%a; %%b; %%c; %%d; %%e; %%f
echo.
pause
goto :MenuPrincipal

:Deletar
set Indice=
cls
echo.
echo  Digite o Indice do Cliente que deseja apagar "c" para cancelar:
IF /i "%Indice%"=="c" goto :MenuPrincipal
set /p "Indice=%BS% Indice: "
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /n /v ""') do IF NOT "%%a"=="%Indice%" >>"Clientes.tmp" echo %%b;%%c;%%d;%%e;%%f
del /q "Clientes.csv"
ren "Clientes.tmp" "Clientes.csv"
goto :MenuPrincipal

 

  • Curtir 1
Postado

@ricardo_br Boa noite Ricardo, fui tentar criar uma base de dados pro meu script, porém não quero só copiar, quero entender o que você fez e tentar fazer por conta própria. Consegue me ajudar mano? você explica muito bem.

 

Queria entender o que essas duas linhas de comando fazem (marcadas em vermelho):

@echo off
    color 8E
    mode 80, 25

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"

:MenuPrincipal
set Opcao=
cls
echo.
echo  Menu Principal
echo.
echo  (C) Cadastrar Cliente
echo.
echo  (V) Ver Clientes
echo.
echo  (L) Localizar Cliente
echo.
echo  (D) Deletar Cadastro
echo.
set /p "Opcao=%BS% Opcao: "
IF /i "%Opcao%"=="v" goto :Ver
IF /i "%Opcao%"=="c" goto :Cadastrar
IF /i "%Opcao%"=="d" goto :Deletar
IF /i "%Opcao%"=="l" (goto :Localizar) else (goto :MenuPrincipal)


:Cadastrar
cls 
    set /p "nome=%BS% Digite seu nome: "
    cls
    set /p "sobrenome=%BS% Digite seu sobrenome: "
:age
    cls
    set /p "nasc=%BS% Digite sua data de nascimento: (dd/mm/aaaa): "
    set /a ano=%date:~6,4%-%nasc:~6,4%
    set MesDiaAtual=%Date:~3,2%%Date:~0,2%
    set MesDiaNasc=%nasc:~3,2%%nasc:~0,2%
    if "%MesDiaAtual%" GEQ "%MesDiaNasc%" (set /a idade=%ano%) else (set /a idade=%ano%-1)
    
    cls
    
    if %idade% lss 18 (
        echo Precisas ter 18 anos ou mais para se cadastrar...
        pause>nul
        cls
        goto :age

    ) else (
        goto :pk
    )

:pk
    echo Digite seu CPF: (###.###.###-##)    
    set /p cpf=
    cls

    echo ------------------------
    echo NOME: %nome% %sobrenome%
    echo ------------------------
    echo IDADE: %idade%
    echo ------------------------
    echo CPF: %cpf%
    echo ------------------------

pause>nul
>>Clientes.csv echo %nome%;%sobrenome%;%idade%;%cpf%;%nasc% 
goto :MenuPrincipal

:Ver
cls
echo.
echo  Lista de Clientes:
echo  ------------------

echo  Indice; Nome; Sobrenome; Idade; CPF; Data Nascimento
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /v /n ""') do echo  %%a; %%b; %%c; %%d; %%e; %%f
echo.
pause
goto :MenuPrincipal

:Localizar
set Pesquisar=
cls
echo.
echo  Digite o nome do cliente:
set /p "Pesquisar=%BS% Pesquisar: "
echo.
echo  Indice; Nome; Sobrenome; Idade; CPF; Data Nascimento
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /n /i "%Pesquisar%"') do echo  %%a; %%b; %%c; %%d; %%e; %%f
echo.
pause
goto :MenuPrincipal

:Deletar
set Indice=
cls
echo.
echo  Digite o Indice do Cliente que deseja apagar "c" para cancelar:
IF /i "%Indice%"=="c" goto :MenuPrincipal
set /p "Indice=%BS% Indice: "
for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /n /v ""') do IF NOT "%%a"=="%Indice%" >>"Clientes.tmp" echo %%b;%%c;%%d;%%e;%%f
del /q "Clientes.csv"
ren "Clientes.tmp" "Clientes.csv"
goto :MenuPrincipal

 

 

Postado
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"


Salva a tecla BackSpace na Variável %BS% isso permite que você possa colocar um espaço no início do texto quando usa um set /p e só serve para deixar o texto mais bonito na tela:
por exemplo:
set /p "Pergunta=%BS% Qual seu primeiro Nome? "
 Qual seu primeiro Nome
set /p "Pergunta= Qual seu primeiro Nome? "
Qual seu primeiro Nome?

 

>>Clientes.csv echo %nome%;%sobrenome%;%idade%;%cpf%;%nasc%


Depois de coletar as informações inseridas salva essas variáveis na última linha no banco de dados clientes.csv

 

for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /v /n ""') do echo  %%a; %%b; %%c; %%d; %%e; %%f


Pega todos os registros de 1 até 6: Nome,Sobrenome,idade,CPF,Data de Nascimento e os exibe na tela através das variáveis de reposição %%a; %%b; %%c.... + o índice no Inicio que na verdade e a linha em que se encontra o registro dentro de clientes.csv
O índice e fornecido pelo comando find você pode testar isso com qualquer arquivo de texto usando o comando: type texto.txt |find /i /v /n ""

 

for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /n /i "%Pesquisar%"') do echo  %%a; %%b; %%c; %%d; %%e; %%f


Mesmo que comando anterior mais pesquisa usuários específicos salvos na variável %pesquisar%

 

for /f "tokens=1-6 Delims=;[]" %%a in ('type Clientes.csv ^|find /i /n /v ""') do IF NOT "%%a"=="%Indice%" >>"Clientes.tmp" echo %%b;%%c;%%d;%%e;%%f


Faz a deleção de um registro da seguinte maneira: Salva todos os registros que não tenham O %Indice% especificado anteriormente pelo usuário em um arquivo temporário chamado clientes.tmp


Ai depois é apagado clientes.csv e clientes.tmp é renomeado para clientes.csv
O arquivo clientes.tmp tem todos os registros menos o especificado em %Indice% permitindo assim apagar um registro.

Postado

@ricardo_br Ricardo, acho que se eu entender essa parte do código, conseguirei resolver a questão de como editar os dados:

image.thumb.png.d848d6633bcae90d86fbdf088f23e7e3.png

Consegue me explicar sua lógica aqui?

Confesso que o comando find não consegui entender; porque IF NOT e não ELSE?; porque as aspas dentro do set no for? 

 

Agradeço

  • Curtir 1

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