[Batch] Ayuda con LOGIN

Iniciado por EAMP14, 11 Abril 2012, 01:19 AM

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

EAMP14

Hola, aqui estoy otra vez molestando, la ultima vez deje ya un tema, que por pena no quise decir que no era lo que buscaba, aunque sinceramente creo que exprese claramente lo que deseaba. En fin, aun continuo tratando de hacer mi LOG IN xd. El ultimo tema me animo mucho para al fin conseguir entender (no a la perfeccion) el uso del Comando FOR, que desde ya hace tiempo me tenia algo fastidiado. Pero finalmente he comprendido la sintaxis y el uso de sus parametros u opciones a nivel basico. Continuando con el tema esto es lo que tengo.


Código (bash) [Seleccionar]
@echo off
TITLE LOGIN Script
COLOR 0A

echo :: WELCOME to LOGIN Script::
echo.

:MENU
echo ------------
echo 1) Registro
echo 2) Log IN
echo 3) Salir
echo ------------
echo.

SET /P "op=Opcion: "
IF %op% EQU 1 (GOTO :REGIST)
IF %op% EQU 2 (GOTO :LOGIN)
IF %op% EQU 3 (exit) else (GOTO :ERROR & GOTO :MENU)

:REGIST

CLS

echo Establece los siguientes parametros:
echo.

SET /P "name=Usuario: "
SET /P "passw=Contrasena: "
echo.

echo %name% > C:\users\%USERNAME%\LOGINScriptUsername.txt
ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
echo %passw% > C:\users\%USERNAME%\LOGINScriptPassword.txt
ATTRIB +H C:\users\%USERNAME%\LOGINScriptPassword.txt

CHOICE /M "Desea guardar esta configuracion?:"
IF %errorlevel% EQU 1 (GOTO :LOGIN)
IF %errorlevel% EQU 2 (GOTO :REGIST) else (GOTO :ERROR & GOTO :REGIST)

:LOGIN

CLS

echo :: LOG IN ::
echo.

SET "userlogin= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%

\LOGINScriptUsername.txt" 2^>nul') DO (SET "%userlogin%=%user%")"

SET "password= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%

\LOGINScriptPassword.txt" 2^>nul') DO (SET "%password%=%pass%")"

SET /P "user= Usuario: "
SET /P "pass= Contrasena: "

IF %user% EQU %userlogin% (IF %pass% EQU %password% ((GOTO :WELCOME) else (GOTO

:LOGINERROR))

:WELCOME

CLS

FOR /F "tokens=1" %%A IN (C:\users\%USERNAME%\LOGINScriptUsername.txt) DO (echo

Bienvenido %%A)
echo.

SET /P "wish= Que desea hacer?: "

:ERROR
CLS
echo ERROR: Se ha producido un error, por favor verifica los datos ingresados

:LOGINERROR
echo El usuario/contrasena no son validos, por favor verifica y vuelve a ingresar

los datos.
echo.
GOTO :LOGIN

pause>NUL




Y esto es lo que yo quiero:

CitarEs simple, un LOG IN que pida usuario y contraseña, si estos son validos continuar sino te jodes.

Como lo pienso o tengo la idea de que se hace:

CitarUna vez registrandose, se crearan dos ficheros .TXT independientes, ambos con 1 sola linea de texto teniendo ya sea el nombre de usuario o la contraseña.

En el LOG IN, establecer una variable que sea igual a la cadena de texto del usuario y otra que sea igual a la contraseña. Un vez pidiendo los datos Usuario y Contraseña respectivamente, con el uso de un IF verficar si ambas variables son iguales, si lo son continuar sino, bueno ya saben (exit).


Cabe mencionar que use echo %errorlevel% para saber si no habia ni un error en los comandos, y tal parece no hubo ni un error en ningun momento, Introduzco el nombre que estableci asi como la contraseña y me envia a la etiqueta :WELCOME cosa que es buena, pero igual aunque no introduzca los datos validos me envia a la etiqueta :WELCOME

PD: No sé realmente si me doy a entender, pero si no lo hago,  por favor decirmelo. y os agradezco la ayuda y atención prestada.



Eleкtro

Cita de: hoyla ultima vez deje ya un tema, que por pena no quise decir que no era lo que buscaba,
aunque sinceramente creo que exprese claramente lo que deseaba. En fin,
aun continuo tratando de hacer mi LOG IN xd.

Cita de: el anterior temaLo que trato de hacer es algo parecido a un Login, donde te pida solo el nombre de usuario para poder ingresar
despues de mostrar el mensaje ir a un SET /P para que el usuario pueda establecer un nombre, pero que ese dato ingresado (el nombre) se quede guardado para la proxima sesion.

Te ofrecí lo que pedias en un principio. Y era un ejemplo.




Modera el contenido de tus mensajes. No permitiré otro parecido.

NO abusar de la prepotencia, De las mayusculas, De palabras malsonantes, De citas inexistentes, Y mucho menos referirse a la ayuda que te ofreció alguien diciendo que te da pena.

En tu anterior mensaje debiste especificar mejor lo que querías, Como has hecho esta vez, O hacerlo después de que recibieras una respuesta no satisfactoria a la ayuda que pedías, Mía en este caso.

El code es fácil, Pero no es la manera de intentar que te ayude alguien.
Puedes hacerlo por ti mismo, Si usas el buscador del foro encontrarías ejemplos mios y de otros usuarios, Códigos de logueo ya hechos.

Saludos.








ELVJop

#2
Este tema me interesa. Pero Electro hacker me parece que no entiendes la idea @EAMP14 Me parece que el quiere que el usuario genere el nombre y la contraseña los tutoriales que encontre de ti tu generabas el nombre y contraseña en el script. Y encontre otro que me guarda el nombre y contraseña en el script pero si lo compilo a .exe me da error (Cosa que me esperaba)

Edit: Lo intente mediante la guia que de accioens sobre un archivo de texto (Pensaba que no funcionaria) Y descubir: Abrir, comparar archivo de texto y dar resultado. Y la pagina web habia sido borrada o algo asi.
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

#3
Hola ElvJop

La idea si la entendi, Me reafirmo en que en el buscador encontrarán ejemplos mios antiguos (Vease el usuario pitoloko) o de otra gente ya hechos. El tema login en batch se ha tocado (Y resuelto) muchas veces.

Respecto a tus supuestos errores al convertir (Técnicamente no es compilar) a exe, Son que cada vez que ejecutas el .exe, este descomprime el bat en una carpeta temporal (Sobreescribiendo cualquier archivo existente).
Obviamente, Si la contraseña se guarda en el propio archivo bat, No será guardada la próxima vez que ejecutes el bat ya que sencillamente estarás ejecutando el bat como si fuese la primera vez que lo ejecutas.

Aunque , No se si te estarás refiriendo a ese tipo de error.

Saludos.








ELVJop

Lo consegui!!!!

Ahora me leo tu comentario que no me lo lei

le dego un quote de lo que encontre con el link

Citar

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

http://foro.elhacker.net/scripting/batch_que_pide_user_y_pass_tira_error-t108822.0.html

Haber si googleamos mas...
(Yo soy el primero que deberia hacerlo pero me hacia ilusion decirlo.

Yo lo que hice fue aprovechar el comando echo XXX > a XXX.XX

seria algo parecido a esto:

@echo off
If exist Archivo.dat goto :revision
cls
echo Defina una contraseña:
set /p er=
echo er > Archivo.dat
cls
goto :programa

:revision
cls
(Comando de capototal 1 para revisar la contraseña)
if %cont%=%pass% (goto :programa) else (goto :mal)

:mal
cls
echo Contraseña incorrecta
pause
exit

:programa
cls
echo Programa
pause
exit
El dia 3 de mayo esta cuenta sera borrada.

EAMP14

No, EleKtro H@cker, me has mal interpratado, no mw referia a una "pena" de lastima sino a que por pena mia o verguenza de no segueir molestando, no dije que no era precisamente lo que buscaba, aunque lo que me diste, realmente me ayudo y es mas dije textualmente en este tema, que fue lo que me animo a comprender bien el comando FOR.

No pretendia sonar prepotente si es que asi parecio, no creo haber abusado de las mayúsculas y si las utilize es por que crei realmente necesitarlas, para hacer el texto mas agradable y resaltar palabras clave,  como los comandos o el nombre del script.

Entiendo que es facil el codigo, pero la verdad, intente por mi mismo conseguirlo, pero como veras no tengo un gran conocimiento en esto como tu, a lo mucho llevo una semana y cabe resaltar que cada persona tiene capacidades diferentes para enteder cosas especificas.

Me disculpo, si es que te ofendi, a ti y al foro que moderas.

EAMP14

Ya lo tengo, muchas gracias por la ayuda y siento molestarlos con esto tan trivial. Como decia Elektro, la verdad es muy sencillo, y de hecho casi estab cerca solo era modificar algo el argumento del comando FOR.

Revise videotutoriales la mayoria eran lamers que no me ayudaron en nada, lei repetidas veces los tutoriales que se presentaban en Sticky. Pero me olvide por completo revisar temas antiguos, ahora se que este tema ya esta visto, asi que no habria problema alguno si se decide borrar, nuevamente muchas gracias a todos. Saludos

Eleкtro

Bueno, A mi me pareció lo que me pareció, Pero si dices que te he malinterpretado, Podría ser, Todos vemos las cosas desde un punto de vista diferente... Tema olvidado.




Voy a analizar el script.

-
CitarIF %op% EQU 1...
CitarIF "%op%" EQU "1"...
Si no cierras la variable, con comillas dobles, dará error si el usuario le da a enter (Sin escribir un número) o escribe un espacio en blanco.

-
CitarGOTO :ERROR & GOTO :MENU
CitarCALL :ERROR & GOTO :MENU
No puedes llamar a una etiqueta y luego a otra, en el mismo comando,Ya que de la etiqueta ERROR no sales.
El "goto :Menu" lo deberías poner dentro del contenido de "Error".

-  
CitarC:\users\%USERNAME%\...\
Citar%Userprofile%\...\
La letra de la unidad principal no siempre es C:, Hay gente que particiona sus discos y/o le cambia la letra desde el servicio de windows...
Por eso es preferible usar la variable %Userprofile%

-  
CitarC:\users\%USERNAME%\...
Citar"%Userprofile%\..."
Si no cierras el argumento, con comillas dobles, Cualquier nombre de usuario que contenga un espacio dará error de sintaxis en el comando.
Ej: C:\Users\Elektro Hacker\

-
CitarATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
CitarATTRIB -H C:\users\%USERNAME%\LOGINScriptUsername.txt
Echo...
ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
La función de "1) registro" de tu script, Solo funcionará una única vez, Ya que No puedes redireccionar (Escribir) en un archivo que ya está oculto, Primero tienes que desoculartlo.

-
CitarCHOICE /M "Desea guardar esta configuracion?:"
IF %errorlevel% EQU 1 (GOTO :LOGIN)
IF %errorlevel% EQU 2 (GOTO :REGIST) else (GOTO :ERROR & GOTO :REGIST)
CitarIF %errorlevel% EQU 1 (GOTO :LOGIN) ELSE (GOTO :REGIST)
Lo que he marcado en rojo es totalmente innecesario, Ya que choice solo permite 2 comprobaciones, no cabe lugar para una tercera. Quiero decir, O es errorlevel 1 o es errorlevel2, no más.

7º -
CitarSET "userlogin= FOR /F "tokens=1" %%U IN ('TYPE "C:\users\%USERNAME%
\LOGINScriptUsername.txt" 2^>nul') DO (SET "%userlogin%=%user%")"
Esta es la parte más problemática del script.
No puedes hacer lo que intentas, No en Batch.
En una variable no puedes setear una función de un comando.
Las variables son para setear cadenas de contenido alfanumerico o negativas.

Ej: Set var=abc
Set var=123
Set var=-123



Citar"tokens=1"
Citar"tokens=*"
1 token (Sin definir un delimitador) = Una palabra sin espacios
Si el usuario o la contraseña contienen espacios, no seprocesará el resto de la cadena.


Citar(SET "%userlogin%=%%U")
(SET "%password%=%%U")
Citar(SET "userlogin=%%U")
(SET "password=%%U")
La sintaxis no es correcta. Los porcentajes se usan para procesar las variables, No para setearlas (No en este caso).

11º
CitarGOTO :LOGIN
pause>NUL
El comando "pause" nunca se llega a procesar, Ya que llamas a una etiqueta xD.

12º
CitarFOR /F "tokens=1" %%A IN (%FILE%) DO (echo Bienvenido %%A)
CitarEcho Bienvenido %name%
La linea es innecesaria.

Y algunos fallos menores...
- Comprobación doble innecesaria del usuario/pass después del FOR...
- No es necesario crear 2 archivos de texto




Bueno, Aqui tienes mi corrección, Espero que te sirva.
Le he echo algunas pequeñas modificaciones aparte de lo que comenté:

Código (dos) [Seleccionar]
@Echo OFF
TITLE LOGIN Script
COLOR 0A

Echo: :: WELCOME to LOGIN Script:: | MORE
Set "File=%UserProfile%\LOGINScript.txt"

:MENU
Echo ------------
Echo 1) Registro
Echo 2) Log IN
Echo 3) Salir
Echo ------------ | MORE
SET /P "op=Opcion: "
Cls
IF "%op%" EQU "1" (GOTO :REGIST)
IF "%op%" EQU "2" (GOTO :LOGIN)
IF "%op%" EQU "3" (Exit /B 0)
Call :ERROR & GOTO :MENU

:REGIST
Call :UserPass
IF not defined name (Call :Error & Goto :Regist) Else (If not defined passw (Call :Error & Goto :Regist))

CHOICE /M "Desea guardar esta configuracion?: "
IF %errorlevel% EQU 1 (
ATTRIB -H "%FILE%" 2>NUL
Echo Usuario:%name%> "%FILE%"
Echo Password:%passw%>> "%FILE%"
ATTRIB +H "%FILE%" 2>NUL
CLS
) ELSE (GOTO :REGIST)

:LOGIN
Echo: :: LOG IN :: | MORE
Call :UserPass
FOR /F "tokens=2 Delims=:" %%U IN ('TYPE "%FILE%" ^| Find "Usuario"') DO (SET "userlogin=%%U")
FOR /F "tokens=2 Delims=:" %%U IN ('TYPE "%FILE%" ^| Find "Password"') DO (SET "password=%%U")
IF "%name% %passw%" EQU "%userlogin% %password%" (GOTO :WELCOME) else (GOTO :LOGINERROR)

:UserPass
Echo: Establece los siguientes parametros: | MORE
SET /P "name=Usuario: "
SET /P "passw=Contrasena: "
Goto :EOF

:ERROR
CLS
Echo: ERROR: Se ha producido un error, por favor verifica los datos ingresados.
Goto :EOF

:LOGINERROR
CLS
Echo: El usuario/contrasena no son validos, por favor verifica y vuelve a ingresar los datos. | MORE
GOTO :LOGIN

:WELCOME
CLS
Echo Bienvenido %name% | MORE
SET /P "wish= Que desea hacer?: "



Salu2.


PD: Los posts como este no se borran, La información le puede servir a alguien con el mismoproblema  :P