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º -
IF %op% EQU 1...
IF "%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º -
GOTO :ERROR & GOTO :MENU
CALL :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".
3º -
C:\users\%USERNAME%\...\
%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º -
C:\users\%USERNAME%\...
"%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º -
ATTRIB +H C:\users\%USERNAME%\LOGINScriptUsername.txt
ATTRIB -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.
6º -
CHOICE /M "Desea guardar esta configuracion?:"
IF %errorlevel% EQU 1 (GOTO :LOGIN)
IF %errorlevel% EQU 2 (GOTO :REGIST) else (GOTO :ERROR & GOTO :REGIST)
IF %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º -
SET "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
8º
"tokens=1"
"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º
(SET "%userlogin%=%%U")
(SET "%password%=%%U")
(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º
GOTO :LOGIN
pause>NUL
El comando "pause" nunca se llega a procesar, Ya que llamas a una etiqueta xD.
12º
FOR /F "tokens=1" %%A IN (%FILE%) DO (echo Bienvenido %%A)
Echo 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é:
COLOR 0A
Echo: :
: WELCOME to LOGIN Script::
| MORE
Set "File=
%UserProfile%\LOGINScript.txt"
:MENU
Cls
:REGIST
CHOICE /M "Desea guardar esta configuracion?: "
Echo Usuario:
%name%> "
%FILE%"
Echo Password:
%passw%>> "
%FILE%"
CLS
:LOGIN
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 "passw=Contrasena: "
:ERROR
CLS
Echo: ERROR: Se ha producido un error, por favor verifica los datos ingresados.
:LOGINERROR
CLS
Echo: El usuario/contrasena no son validos, por favor verifica y vuelve a ingresar los datos.
| MORE
: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