1

I am trying to get a password input in a cmd program made in BATCH. I was wondering if it was possible to have bash-like password input in BATCH. ICYDK, i am talking about when you type a password in bash, it doesn't show the characters but instead the whole field is just blank.

I am currently using this:

powershell -Command $pword = read-host "Enter password" -AsSecureString ; ^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > .tmp.txt 
set /p password=<.tmp.txt & del .tmp.txt

I was just wondering if it is possible.

Aman
  • 59
  • 2
  • 12
  • 1
    You have a mix of powershell and batch. Your question is not tagged with powershell, so what language do you want it in? – Squashman Dec 04 '16 at 14:45
  • 4
    Possible duplicate of [Hide Input in Batch File](http://stackoverflow.com/questions/5852759/hide-input-in-batch-file) – Squashman Dec 04 '16 at 14:48

1 Answers1

2

This solution is provided from Batch File Command Hide Password

@echo off
echo Put your password : 
Call :getPassword password 
echo %password%
pause & exit
::------------------------------------------------------------------------------
:: Masks user input and returns the input as a variable.
:: Password-masking code based on http://www.dostips.com/forum/viewtopic.php?p=33538#p33538
::
:: Arguments: %1 - the variable to store the password in
::            %2 - the prompt to display when receiving input
::------------------------------------------------------------------------------
:getPassword
set "_password="

:: We need a backspace to handle character removal
for /f %%a in ('"prompt;$H&for %%b in (0) do rem"') do set "BS=%%a"

:: Prompt the user 
set /p "=%~2" <nul 

:keyLoop
:: Retrieve a keypress
set "key="
for /f "delims=" %%a in ('xcopy /l /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%a"
set "key=%key:~-1%"

:: If No keypress (enter), then exit
:: If backspace, remove character from password and console
:: Otherwise, add a character to password and go ask for next one
if defined key (
    if "%key%"=="%BS%" (
        if defined _password (
            set "_password=%_password:~0,-1%"
            set /p "=!BS! !BS!"<nul
        )
    ) else (
        set "_password=%_password%%key%"
        set /p "="<nul
    )
    goto :keyLoop
)
echo/

:: Return password to caller
set "%~1=%_password%"
goto :eof
Community
  • 1
  • 1
Hackoo
  • 18,337
  • 3
  • 40
  • 70