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 が検出されない限り、read は 0 を返し、ユーザーが入力した文字は char 変数に格納されます。
IFS= 部分は IFS 変数をクリアします。これにより、入力したスペースまたはタブ文字が、読み取りによって解析されるのではなく、パスワードに含まれるようになります。