2014-10-28 36 views
0

我正在使用简单的批处理脚本来隐藏用户输入的密码。解决方案是创建一个弹出窗口并更改该弹出窗口的文本颜色。以下是代码,它工作正常在其他人的顶部制作cmd窗口

@echo off 
Echo Please enter your password in the popup window and then press enter 

set tempbat="%temp%\p.cmd" 

REM Create temporary batch file to make popup window for entering password 'masked' 
echo mode 20,1 >%tempbat% 
echo color 01 >>%tempbat% 
echo Title Enter Password >>%tempbat% 
echo setlocal enabledelayedexpansion >>%tempbat% 
echo set /p Pass= >>%tempbat% 
echo echo !pass!^>"%temp%\pass.txt" >>%tempbat% 
echo exit >>%tempbat% 

start /wait "" %tempbat% 
del %tempbat% 2>NUL 

set /p Pwd=<"%temp%\pass.txt" 
del "%temp%\pass.txt" 2>NUL 

echo %Pwd% 

我唯一担心的是,当弹出窗口出现时,我可以把它总是在主cmd窗口,并主要cmd窗口甚至禁止访问的顶部(我期望的行为像Bootstrap Modal)?

感谢阅读,希望得到帮助从你

+0

使用的畏缩密码的弹出可以是无用的,但如果这是你想要你可以使用CMDOW什么。 http://www.commandline.co.uk/cmdow/ – 2014-10-28 15:51:50

+0

感谢您的建议。但是我的工作只需要纯批处理脚本。我无权使用第三方脚本 – Liverpool 2014-10-29 02:40:23

回答

0

,而不是试图掩盖的东西的密码,有可能混淆用户输入批次。见MC ND代码from this answer

@echo off 
setlocal enableextensions disabledelayedexpansion 

rem Call the subroutine to get the password  
call :getPassword password 

rem Echo what the function returns 
if defined password (
    echo You have typed [%password%] 
) else (
    echo You have typed nothing 
) 

rem End of the process  
endlocal 
exit /b 


rem Subroutine to get the password 
:getPassword returnVar 
setlocal enableextensions disabledelayedexpansion 
set "_password=" 

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

rem Prompt the user 
set /p "=password ?:" <nul 

:keyLoop 
rem 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%" 

rem handle the keypress 
rem  if No keypress (enter), then exit 
rem  if backspace, remove character from password and console 
rem  else add character to password and go ask for next one 
if defined key (
    if "%key%"=="%BS%" (
     if defined _password (
      set "_password=%_password:~0,-1%" 
      setlocal enabledelayedexpansion & set /p "=!BS! !BS!"<nul & endlocal 
     ) 
    ) else (
     set "_password=%_password%%key%" 
     set /p "=*"<nul 
    ) 
    goto :keyLoop 
) 
echo(
rem return password to caller 
if defined _password (set "exitCode=0") else (set "exitCode=1") 
endlocal & set "%~1=%_password%" & exit /b %exitCode% 
+0

它的工作原理非常感谢。你救了我的一天:) – Liverpool 2014-10-29 05:56:01

+0

我刚发现它不工作,如果我的密码包含一些特殊字符,如^“'()。你能帮忙吗? – Liverpool 2014-10-30 06:02:04