Ir ao conteúdo

Posts recomendados

Postado

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"

 

Postado

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

 

Postado

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

Postado

Não sei, para mim funciona tanto com aspas como sem apas:

 

@echo off

set Nome=Ricardo

if /i "%Nome%"=="Ricardo" echo oi Ricardo
pause

 

@echo off

set Nome=Ricardo

if /i %Nome%==Ricardo echo oi Ricardo
pause

 

Ambos dão o mesmo resultado para mim...

Postado

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

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...