Batch que pide user y pass, tira error

Iniciado por Tango01, 13 Febrero 2006, 01:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Tango01

Hola a todos.  ::)

Me estoy estrenando en el foro y espero ser bienvenido.

He leido todo el tuto de programación en BAT, de soplo,  y los siguientes mensajes e hice un pequeño programita.
Pero (siempre hay un pero  :P ) en una perte me trabo y no sé por qué.

Les pongo el codigo...:
Código (dos) [Seleccionar]
@echo off
title -~=Registrate=~-
color 3a

:user
echo.
echo Escriba su nombre de cuenta y pulse Enter:
set /p use=
if %use% == D:\%use% goto pass
if not exist D:\%use% goto nexis

:pass
cls
echo %use% escribi tu contraseña y pulsa Enter.
set /p pass=
if %pass% == D:\Pase\%pass% goto inicio
if not exist D:\Pase\%pass% goto mal

:mal
echo La contraseña es incorrecta, pulsa Enter e intenta de nuevo.
pause
goto pass

:nexis
echo.
echo El nombre de usuario no existe,
echo queres hacer una cuenta con ese nombre??
echo 1 - Si.
echo 2 - No.
echo 3 - Volver al menu anterior.
echo.

set /p tecla=
if %tecla%== 1 goto :1
if %tecla%== 2 goto :2
if %tecla%== 3 goto :3

:1
echo 1 - Si.
goto create

:2
echo 2 - No.
goto fin

:3
echo 3 - Atras.
goto user

:create
mkdir D:\%use%
goto inicio

:inicio
cls
ECHO     Bienvenido %use%
pause
goto fin

:fin
cls
echo     Hasta luego.
pause


El programa primero te pide un usuario que tiene una carpeta en el disco D: si existe la carpeta con su nombre te pide la contraseña (aca tira el problema) y si el usuario no existe te da la opción de crear una carpeta. Las carpetas con el nombre de la contraseña las hago solo yo a mano en la carpeta D:\Pase\

Lo de ver si el usuario existe y mandarlo a la parte de la contraseña, todo bien. Pero cuando meto el pass siempre me dice que La contraseña es incorrecta, y no sé por qué?

Esperaba que me pudiesen orientar un poco y decirme si ven el error.

Desde ya se los agradezco y espero su ayuda.

Un saludo.  ;)

P.D.: No sé si este será el foro adecuado para estas preguntas, si no lo és, mover el tema a donde sea más conveniente.

Hendrix

usa %username% por %use%... ;) ;) ;)

Salu2

Hendrix

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Tango01

Gracias, Punk-rock

Pero sigo en la misma, lo unico que hace es cambiarle el nombre a lo que hace las carpetas de usuarios.

Así quedó ahora...:

@echo off
title -~=Registrate=~-
color 3a

:username
echo.
echo Escriba su nombre de cuenta y pulse Enter:
set /p username=   -------->>//Modifiqué esto
if %username% == D:\%username% goto pass       -------->>//Modifiqué esto
if not exist D:\%username% goto nexis       -------->>//Modifiqué esto

:pass
echo %username% escribi tu contraseña y pulsa Enter.       -------->>//Modifiqué esto
set /p pass=
if %pass% == D:\Pase\%pass% goto inicio
if not exist D:\Pase\%pass% goto mal

:mal
echo La contraseña es incorrecta, pulsa Enter e intenta de nuevo.
pause
goto pass

:nexis
echo.
echo El nombre de usuario no existe,
echo queres hacer una cuenta con ese nombre??
echo 1 - Si.
echo 2 - No.
echo 3 - Volver al menu anterior.
echo.

set /p tecla=
if %tecla%== 1 goto :1
if %tecla%== 2 goto :2
if %tecla%== 3 goto :3

:1
echo 1 - Si.
goto create

:2
echo 2 - No.
goto fin

:3
echo 3 - Atras.
goto user

:create
mkdir D:\%username%      -------->>//Modifiqué esto
goto inicio

:inicio
cls
ECHO     Bienvenido %username%      -------->>//Modifiqué esto
pause
goto fin

:fin
cls
echo     Hasta luego.
pause


Espero que puedas/an darme alguna otra pista para ver si logro hacerlo andar.

Te agradezco mucho y espero su ayuda
Saludos.  ::)

kapototal1

Creo, solo creo, que es por que en la parte que escribiste
:user
echo.
echo Escriba su nombre de cuenta y pulse Enter:
set /p use=
if %use% == D:\%use% goto pass
if not exist D:\%use% goto nexis


no anda por que pones "D:\%use%".

Yo lo que haria, es crear un archivo con el contenido deseado y guardarlo con una extensión .bat, y luego "traer" el dato con un FOR.

por ejemplo...

@ echo off
FOR /F "tokens=1 delims=;" %%G IN (archivo.dat) DO (
set pass=%%G
)
echo Ingrese la contraseña:
set/p cont=
If %cont%==%pass% goto bien else goto mal

:bien
cls
echo.
echo La contraseña esta bien.
pause
exit

:mal
cls
echo.
echo La contraseña esta mal.
pause
exit


Y por ejemplo el contenido del archivo.dat sea:
1234
( que seria la contraseña correcta )

La funcion del FOR en ese caso es leer la primer palabra que hay en el archivo .dat y la setea con una variable que vos quieras en este caso "pass".

Espero que te sirva mi informacion. Saludos  ;)


flony

no podes traer info de esta forma if %pass% == D:\Pase\%pass% goto inicio por lo q pones exciste una carpeta llamada Pase y adentro estan los pass
seria mas facil guardarlo en un txt y sacar esa info con un for
FOR /F "tokens=1" %%G IN (pass.txt) DO (
set pass=%%G
)
...aclaro sera para solo un usuario xq si pones mas pas dentro de ese txt va a ser un poco mas complicado...o sea seria una pass1.txt pass2.txt o meter todos los pass en un txt
si estuvieran todos juntos al guardar tanto los usuarios deberias guardar la clave en el txt
Citarusuario1 123
usuario2 234
etc
for /f "tokens=2" %%_ in ('find /i "usuario1" D:\Pase) do (set pass=%%_)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

kapototal1

eeem.. Es lo que le explique yo en la respuesta de arriba, excepto por la parte de
for /f "tokens=2" %%_ in ('find /i "usuario1" D:\Pase) do (set pass=%%_)

kapototal1

Una duda, que funcion cumple el

in ('find /i "usuario1" D:\Pase)

no entiendo que funcion cumple... si me la podrias explicar te lo agradezco.. ;)

flony

si lo pones solo find /i "usuario1" D:\Pase vas a ver que en la salida de pantalla va a buscar la palabra usuario en D:\Pase lo que logra for es que esa salida de pantalla se pueda seguir usando en este caso que sea una variable
una pequeña observacion me olvide de un asterisco simple al final  :silbar: :silbar:
estaba viendo de vuelta el code  :P
for /f "tokens=2" %%_ in ('find /i "usuario1" D:\Pase') do (set pass=%%_)
ahi ta bien
si un problema no tiene solucion entonces no es un problema...es algo inevitable

Novlucker

Solamente estan respondiendo un post muerto en febrero del 2006 :¬¬
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein