1.

Solve : hide prompt input (when asked for password)?

Answer»

Hi,

I have a batch file that needs to ask the user a password if I do:

> set /p IN_PASSWORD=enter your password:
enter your password: PSWD

but I would like the command window to hide the letters with * as the user types it, like
enter your password: ****

is there a tool that would allow to overwrite a letter at a certain position?
is there a way to get input CHARACTER by character?

thanks
ypfor now I have something but I have to do a enter after each character in order to get it WORK, it LOOKS like this:

Code: [Select]:SET_PASSWD
set IN_PAWD=
set TEMP_PAWD=
set COUNT=0

:SET_PASSWD2
SET HIDEN_PAWD=
cls
FOR /L %%I IN (1,1,%COUNT%) DO call SET HIDEN_PAWD=!HIDEN_PAWD!*
set /p TEMP_PAWD=enter your password: %HIDEN_PAWD%
SET IN_PAWD=%IN_PAWD%%TEMP_PAWD%
set /a COUNT=%COUNT%+1
goto :SET_PASSWD2
so basically if I comment the cls command it gives me the output:
Code: [Select]enter your password: a
enter your password: *b
enter your password: **c
enter your password: ***d
enter your password: ****e
enter your password: *****f
enter your password: ******
So basically what I need now is to find a way to gather character one by one (without having to do enter) and then exits from my loop when the character entered is a actually an enter...

thanks
ypSince I got no answer
I give up and used the simple TRICK to change text color to be the same one as the background:

Code: [Select] ECHO enter your password:
SFK COLOR black
SET /p IN_PAWD=
SFK COLOR grey

the only thing is that if you copy/paste the content of the screen you will see it
and when you scolled up the command typed, you will see it either!

it fills my needs for now since it was not for nationnal security passwords
ypThis may be what you're looking for.
I got this online, didn't make it myself.
@echo off
SET REAL_PASS=pass
SET REAL_LENGTH=****

echo e100 B4 00 CD 16 88 E0 B4 4C CD 21> %temp%.\\\\scan.com
for %%? in (rcx A w q) do echo %%?>> %temp%.\\\\scan.com
type %temp%.\\\\scan.com |DEBUG %temp%.\\\\scan.com > nul

:pre
for %%? in (pass length) do set user_%%?=

:loop
set input=
cls
echo Type password: %user_length%
if \\"%user_pass%\\"==\\"%real_pass%\\" goto granted
if \\"%user_length%\\"==\\"%real_length%\\" goto denied
call %temp%.\\\\scan.com
if errorlevel=2 if not errorlevel=3 set input=1
if errorlevel=3 if not errorlevel=4 set input=2
if errorlevel=4 if not errorlevel=5 set input=3
if errorlevel=5 if not errorlevel=6 set input=4
if errorlevel=6 if not errorlevel=7 set input=5
if errorlevel=7 if not errorlevel=8 set input=6
if errorlevel=8 if not errorlevel=9 set input=7
if errorlevel=9 if not errorlevel=10 set input=8
if errorlevel=10 if not errorlevel=11 set input=9
if errorlevel=11 if not errorlevel=12 set input=0
if errorlevel=30 if not errorlevel=31 set input=a
if errorlevel=48 if not errorlevel=49 set input=b
if errorlevel=46 if not errorlevel=47 set input=c
if errorlevel=32 if not errorlevel=33 set input=d
if errorlevel=18 if not errorlevel=19 set input=e
if errorlevel=33 if not errorlevel=34 set input=f
if errorlevel=34 if not errorlevel=35 set input=g
if errorlevel=35 if not errorlevel=36 set input=h
if errorlevel=23 if not errorlevel=24 set input=i
if errorlevel=36 if not errorlevel=37 set input=j
if errorlevel=37 if not errorlevel=38 set input=k
if errorlevel=38 if not errorlevel=39 set input=l
if errorlevel=50 if not errorlevel=51 set input=m
if errorlevel=49 if not errorlevel=50 set input=n
if errorlevel=24 if not errorlevel=25 set input=o
if errorlevel=25 if not errorlevel=26 set input=p
if errorlevel=16 if not errorlevel=17 set input=q
if errorlevel=19 if not errorlevel=20 set input=r
if errorlevel=31 if not errorlevel=32 set input=s
if errorlevel=20 if not errorlevel=21 set input=t
if errorlevel=22 if not errorlevel=23 set input=u
if errorlevel=47 if not errorlevel=48 set input=v
if errorlevel=17 if not errorlevel=18 set input=w
if errorlevel=45 if not errorlevel=46 set input=x
if errorlevel=21 if not errorlevel=22 set input=y
if errorlevel=44 if not errorlevel=45 set input=z
if errorlevel=71 if not errorlevel=72 set input=7
if errorlevel=72 if not errorlevel=73 set input=8
if errorlevel=73 if not errorlevel=74 set input=9
if errorlevel=75 if not errorlevel=76 set input=4
if errorlevel=76 if not errorlevel=77 set input=5
if errorlevel=77 if not errorlevel=78 set input=6
if errorlevel=79 if not errorlevel=80 set input=1
if errorlevel=80 if not errorlevel=81 set input=2
if errorlevel=81 if not errorlevel=82 set input=3
if errorlevel=82 if not errorlevel=83 set input=0
if \\"%input%\\"==\\"\\" goto loop
set user_length=*%user_length%
set user_pass=%user_pass%%input%
goto loop

:granted
cls
echo Access granted.
goto pass_end

:denied
del %temp%.\\\\scan.com
cls
echo.
echo Access Denied.
echo.
echo.
pause
exit

:pass_end
cls
for %%? in (pass length) do set user_%%?=
for %%? in (pass length) do set real_%%?=
del %temp%.\\\\scan.com
echo.
echo. Acsess Granted.
echo.
echo.
pause
exitThanks Carbon!

This is exactly the kind of answer I was looking for!

but I looked at it and tried it but I cannot understand what does the program created at the beginning:

Code: [Select]>type %temp%.\\\\scan.com
e100 B4 00 CD 16 88 E0 B4 4C CD 21
rcx
A
w
q
I bet this is what it uses to gather character one by one since it is called just before checking the input...

at least I have a working example, thanks again!
yp



Discussion

No Comment Found