I want to make a login-feature for one of my batch files using an authorization-tool, and I'm asking myself how I pass the variable of the username from the auth-tool to the initial script.
I've been doing it so far by writing the username into a .txt file and having the main program read it, like this:
echo Guest26528 >username.txt
>nul find "Guest26528" username.txt && (set usr=Guest26528)
>nul find "ResAs" username.txt && (set usr=ResAs)
But there must be a more efficient way, right?
For anyone interested, this is the authentification-tool:
@echo off
color 1F
type authart.txt
echo.
echo.
set /a errorcount = 0
:start
echo Please login to your clearance profile
set /p usr="Username:"
if %usr%==ResAs goto login0
echo Error 303: Unknown Username
goto start
:login0
set /p pswd="Enter Password for user ResAs:"
if %pswd%==12345 goto pass
echo Error 304: Incorrect password
set /a errorcount = %errorcount% 1
set /a attempts = 3 - %errorcount%
echo %attempts% Attempts left.
if %errorcount%==3 goto fail
goto login0
:fail
echo Error 305: Too many failed login attempts.
echo Press any button to continue.
pause >nul
exit
:pass
echo Login successful.
echo ResAs >username.txt
I'm still very new to this whole coding thing and english isn't my main language, so I hope I wrote my question in an understandable way. I'm excited for your ideas!
CodePudding user response:
I think this can solve your problem: https://stackoverflow.com/a/48264867/14473816
Your solution is good anyway, you can also pass batch1 variables as arguments to batch2.
CodePudding user response:
In place of
echo ResAs >username.txt
Use
initialscript %usr%
Within initialscript
, %1
will provide the value that was input as usr
.
Note that as set /p
accepts any string, the user may input a string containing spaces so
if "%usr%"=="ResAs" goto login0
is better. In that case, use initialscript "%usr%"
.
Better, but not foolproof. The user could for instance input Hel"lo
which would try to execute
if "Hel"lo"=="ResAs" goto login0
and that would generate a syntax error.
There are many articles on SO which deal with accepting user-input.
CodePudding user response:
The setx command writes a variable into the registry and can be used if you want to use a variable globally for all batch files.
SETX VAR_C somevalue
Alternatively you could write the variable to a file and read it back into the other batch file ie;
Batch file A:
SET VAR_C=somevalue
ECHO %VAR_C% >%TMP%\var_c
Batch file B:
ECHO %VAR_C%