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" 

read コマンドのオプションは次のとおりです。 -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.

バッチの場合は、より複雑なようです。

ここでそれについて読んでください: バッチファイルで入力テキストをマスクできますか

于 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 に答える