我从命令行获取用户输入的.bat文件命令是
set /p weblogicpassword=Enter weblogic password:%=%
用于从bash脚本获取用户输入的.sh文件命令是
echo -n "Enter weblogic password: "
read weblogicpassword
现在,当我们输入一些密码值时,这些值在命令行中可见。 我们如何从命令行获取密码值,这些值对于 * *
等用户应该是不可见的答案 0 :(得分:12)
对于bash,read -s
。
-s Silent mode. If input is coming from a terminal, characters are not echoed.
批次似乎更复杂。
答案 1 :(得分:12)
通过使用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"
read命令的选项是: -p:提示字符串。 -r:不要使用反斜杠作为转义字符。 -s:静默模式,不回显输入。 -n 1:要输入的字符数。
除非遇到\ 0,否则读取返回0,并且用户键入的字符将放入char变量。
IFS = part清除IFS变量,确保您键入的任何空格或制表符都包含在密码中,而不是通过读取解析出来。
答案 2 :(得分: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
答案 3 :(得分:0)
我阅读了所有答案,并修复了一个。
此代码要求用户输入密码。您可以在if "%password%"=="SuperUser"
更改密码。
检查输入,如果输入有效(SuperUser),则转到标签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