Ir ao conteúdo
  • Cadastre-se

Bat Não consigo inserir um IF ELSE dentro de um FOR no batch


Posts recomendados

Bom, eu quero criar uma condição para o usuário poder editar os seus dados, que no caso seria a condição de ele existir no banco de dados "UsersDatabase.csv". Para isso eu usei um IF e ELSE, porém quando eu tento rodar o script, ele toda vez, sem exceção, interpreta como se o usuário não existisse. Como resolver?

 

:editar


echo Digite o CPF do usuario:
set /p cpf_edit=

for /f "tokens=1-4 delims=; " %%a in (UsersDatabase.csv) do (IF /I "%cpf_edit%" == "%%d" (	
	cls
	echo %%a %%b - %%c - %%d) else (goto :editar))

echo.
echo ------------------------
echo Qual dado deseja editar?
echo.
echo 1 - Nome 
echo.
echo 2 - Data 
echo.
echo 3 - CPF
echo.
echo ------------------------
set /p dado_edit=
cls

for /f "tokens=1-4 delims=; " %%a in ('type UsersDatabase.csv ^| find /i /v "" ') do if %%d equ %cpf_edit% (>>UserInfo.tmp echo %%a;%%b;%%c;%%d) 

if %dado_edit% equ 1 (goto :nome_edit)
if %dado_edit% equ 2 (goto :data_edit)
if %dado_edit% equ 3 (goto :cpf_edit)

:nome_edit

	for /f "tokens=1-4 delims=; " %%a in ('type UsersDatabase.csv ^| find /i /v "" ') do if not %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %%a %%b;%%c;%%d)

	echo Digite o novo nome do usuario:
	set /p new_name=
	echo.
	echo Digite o novo sobrenome do usuario:
	set /p new_sn=

	for /f "tokens=1-4 delims=; " %%a in ('type UserInfo.tmp ^| find /i /v "" ') do if %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %new_name% %new_sn%;%%c;%%d)

	goto :del_tmp
 

:data_edit

	for /f "tokens=1-4 delims=; " %%a in ('type UsersDatabase.csv ^| find /i /v "" ') do if not %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %%a %%b;%%c;%%d)

	echo Digite a nova data de nascimento do usuario:
	set /p new_date=

	for /f "tokens=1-4 delims=; " %%a in ('type UserInfo.tmp ^| find /i /v "" ') do if %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %%a %%b;%new_date%;%%d)

	goto :del_tmp

:cpf_edit

	for /f "tokens=1-4 delims=; " %%a in ('type UsersDatabase.csv ^| find /i /v "" ') do if not %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %%a %%b;%%c;%%d)

	echo Digite o novo CPF do usuario:
	set /p new_cpf=

	for /f "tokens=1-4 delims=; " %%a in ('type UserInfo.tmp ^| find /i /v "" ') do if %%d equ %cpf_edit% (>>UsersDatabase.tmp echo %%a %%b;%%c;%new_cpf%)

	goto :del_tmp

:del_tmp
	cls
	echo Dados atualizados com sucesso!
	del UsersDatabase.csv
	del UserInfo.tmp
	ren "UsersDatabase.tmp" "UsersDatabase.csv"

 

Link para o comentário
Compartilhar em outros sites

Acredito que é porque ele só chega a verificar o primeiro registro. Se o primeiro registro não for o CPF pesquisado ele volta para editar (que faz tudo repetir do inicio) e ai nunca chega a verificar o segundo registro....

Usando uma variável para determinar se um CPF foi encontrado ou não:

 

@echo off

:editar
cls
echo Digite o CPF do usuario:
set /p cpf_edit=

set Sucesso=
for /f "tokens=1-4 delims=; " %%a in (UsersDatabase.csv) do IF /I "%cpf_edit%" == "%%d" (	
	                                                                                 cls
	                                                                                 echo %%a %%b - %%c - %%d
                                                                                         set Sucesso=s
                                                                                        )
IF NOT "%Sucesso%"=="s" (
                         echo Erro! O CPF não foi encontrado...
                         pause
                         goto :editar
                        )

pause

 

Link para o comentário
Compartilhar em outros sites

@Giovanni Uchoa Para redefinir a variável, por exemplo se você pesquisar um CPF e ele for encontrado sucesso=s

 

Ai você pesquisa outro CPF sem sucesso, mais como a variável sucesso continua = s ai vai dar como se o CPF fosse encontrado, ai você tem que remover o "s" sempre que iniciar uma nova pesquisa....

Link para o comentário
Compartilhar em outros sites

Descubri o erro, quando você reseta a veriável e depois faz um if sem aspas da erro:

@echo off

set Nome=Ricardo
set Nome=
if /i %Nome%==Ricardo (echo oi Ricardo) else (voce não e Ricardo)
pause

 

Então se você da um reset na variável e quer usar depois no IF tem que usar aspas senão o batch simplesmente fecha...

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!