2014-10-28 4 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/ –

+0

Спасибо за ваше предложение. Но моя работа требует только чисто пакетных скриптов. У меня нет прав на сторонние скрипты пользователя – Liverpool

ответ

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

+0

Я только узнал, что он не работает, если в моем пароле есть специальный символ, например^"(). Не могли бы вы помочь? – Liverpool

Смежные вопросы