2017-06-18 12 views
0

かなりストレートな質問です。 cmdではシャドータイプが可能ですか? (私はあなたが入力したものを表示せずにcmdウィンドウに入力することを意味する)例えば、ユーザのパスワードをnet user J.Doe *と設定しているときのように。コマンドでそれを真似することは可能ですか?cmdではshadowtypeが可能ですか?

+0

cmdが持っていないため、コマンドを内蔵していますが、ユーザーの入力をエコーせずに生の読み取りを行うには、外部コンソールプログラムを書くことができます画面バッファに転送します。例えば、Pythonでは 'msvcrt.getwch'を使ってエコーのない文字を読むことができます。コンソールの調理された読み込み(F3/F7や上/下矢印、エイリアス、左/右矢印キー、ホーム、エンド、バックスペースなどによるコマンドライン編集など)の入力履歴が失われます。これらの機能を自分で実装する必要があります。 – eryksun

+0

あなたの入力を非表示にする場合は、これをチェックしてください:https://stackoverflow.com/a/24396213/388389 – npocmaka

+1

[バッチファイルの入力を隠す]の可能な複製(https://stackoverflow.com/questions/5852759/hide- input-in-batch-file) – eryksun

答えて

0

バックスペースを使用して文字を削除する100%バッチソリューションiは、入力キーを受け入れてパスワードを有効にし、パスワードの長さを自動的に数えます。 BAT/PowerShellを使用して

@echo off&cls 

::The password 
set "$Mdp=toto1234" 

::La longeur du Mot de passe 
set "$Long=-1" 
for /F "delims=" %%c in ('cmd /D /U /C echo %$Mdp% ^| find /V ""') do (set /a $Long+=1) 

::Les autres variables 
set "$l=" 
set "$l1=" 
set "$C=0" 

:test 
if %$c%==%$Long% goto:Pastrouve 
set "$T=" 
cls&echo Entrer votre MDP : %$l1% 
For /F "delims=" %%# In ('Xcopy /W "%~f0" "%~f0" 2^>Nul') Do If Not Defined $T Set "$T=%%#" 

set "$testenter=%$T:~-1%" 
if not defined $Testenter goto:Pastrouve 

if %$T:~-1%== (
if not %$C%==0 (
    Set "$l=%$l:~0,-1%" 
    set "$l1=%$l1:~0,-1%" 
    set /a $C-=1) 
) else (
    Set "$l=%$l%%$T:~-1%" 
    set "$l1=%$l1%*" 
    set /a $C+=1) 

if "%$l%"=="%$Mdp%" goto:trouve 
goto:test 

:trouve 
echo Pass OK 
Pause >NUL & exit/b 

:Pastrouve 
echo PASS NOT OK 
Pause>NUL & exit/b 

と同じ

@echo off&cls 
set $MDP=toto1234 
for /f "delims=" %%a in ('powershell -c "$rep=read-host Entrer_votre_MDP -AsSecureString;$password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($rep));write $password"') do set $rep=%%a 

if %$MDP%==%$rep% (echo PASS OK) else (echo PASS NOT OK) 
exit/b 
+0

参考までに、xcopy.exeは外部プログラムです( 'copy'と違って)、100%バッチではありませんが、Windowsは常にこのプログラムを持っていなければなりません。これは異常な動作に依存します。 xcopy.exeは 'SetConsoleMode'を呼び出して' ENABLE_PROCESSED_INPUT'、 'ENABLE_LINE_INPUT'、' ENABLE_ECHO_INPUT'フラグをクリアすることで、 "press any key"プロンプトに対して未処理のコンソールを読み込みます。次に、ユーザーがキーを押すのを待つプログラムとは異なり、実際には入力された文字を 'StandardOutput'に書き戻します。この場合、' for/f'ループのパイプです。 – eryksun

関連する問題