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.
1º -
2º -
El "goto :Menu" lo deberías poner dentro del contenido de "Error".
3º -
Por eso es preferible usar la variable %Userprofile%
4º -
Ej: C:\Users\Elektro Hacker\
5º -
6º -
7º -
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:
8º
Si el usuario o la contraseña contienen espacios, no seprocesará el resto de la cadena.
9º
11º
12º
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é:
Salu2.
PD: Los posts como este no se borran, La información le puede servir a alguien con el mismoproblema
Voy a analizar el script.
1º -
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.
2º -
CitarGOTO :ERROR & GOTO :MENU
CitarCALL :ERROR & GOTO :MENUNo 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".
3º -
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%
4º -
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\
5º -
CitarATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
CitarATTRIB -H C:\users\%USERNAME%\LOGINScriptUsername.txtLa 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.
Echo...
ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
6º -
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%Esta es la parte más problemática del script.
\LOGINScriptUsername.txt" 2^>nul') DO (SET "%userlogin%=%user%")"
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:
Código [Seleccionar]
Set var=abc
Set var=123
Set var=-123
8º
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.
9º
Citar(SET "%userlogin%=%%U")
(SET "%password%=%%U")
Citar(SET "userlogin=%%U")La sintaxis no es correcta. Los porcentajes se usan para procesar las variables, No para setearlas (No en este caso).
(SET "password=%%U")
11º
CitarGOTO :LOGINEl comando "pause" nunca se llega a procesar, Ya que llamas a una etiqueta xD.
pause>NUL
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