18

我从命令行获取用户输入的 .bat 文件命令是

set /p weblogicpassword=Enter weblogic password:%=%

我从 bash 脚本获取用户输入的 .sh 文件命令是

echo -n "Enter weblogic password: "
read weblogicpassword

现在,当我们输入一些密码值时,这些值在命令行中可见。我们如何从命令行获取对用户不可见的密码值* *

4

4 回答 4

15

通过使用 powershell,我们可以在 32 位和 64 位中实现这一点。

 @ECHO OFF
 set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
      $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
            [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
 for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
 echo %password%

通过使用它,我们可以在命令行中使用 *** 获取密码

在 bash 脚本中,我们可以使用下面的代码来实现这一点。

#!/bin/bash
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char 
do
if [[ $char == $'\0' ]];     then
    break
fi
if [[ $char == $'\177' ]];  then
    prompt=$'\b \b'
    password="${password%?}"
else
    prompt='*'
    password+="$char"
fi
done
echo " "
echo "Done. Password=$password" 

读取命令的选项有: -p :提示字符串。-r :不要使用反斜杠作为转义字符。-s :静音模式,输入不回显。-n 1 : 要输入的字符数。

除非遇到 \0,否则 read 返回 0,并且用户键入的字符被放入 char 变量中。

IFS= 部分清除 IFS 变量,这确保您键入的任何空格或制表符都包含在密码中,而不是通过读取被解析出来。

于 2014-12-10T07:42:14.757 回答
13

对于 bash 其read -s.

-s Silent mode. If input is coming from a terminal, characters are not echoed.

对于批处理,它似乎更复杂。

在此处阅读: 我可以屏蔽 bat 文件中的输入文本吗

于 2013-11-13T09:59:38.827 回答
8

这是 Windows 32 位的解决方案。

@echo off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>%temp%\ftp.com
set /p password=What is your password? <nul
for /f "tokens=*" %%i in ('%temp%\ftp.com') do set "password=%%i"
del %temp%\ftp.com
echo password is "%password%"
pause
于 2013-11-13T15:48:52.600 回答
0

我阅读了所有答案并修复了一个。

此代码要求用户输入密码。您可以在 中更改密码if "%password%"=="SuperUser"

它检查输入,如果输入有效(超级用户),它会转到 label 1

:1
echo True
cls
exit
rem Or false goto 2
:2
echo False
cls
exit

这是代码:

@echo off
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ; ^
     $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
           [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1

:Again
set "psCommand=powershell -Command "$pword = read-host 'Wrong Password?. Try Again' -AsSecureString ; ^
     $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
           [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1

:2
goto Again

:1
echo Valid password
pause>nul
于 2015-02-28T14:45:36.233 回答