Batch verdeckte Passwortabfrage mit User-Name?
Ich möchte im Editor ein Batch Programm erstellen mit einer verdeckten ( das man die Eingabe nicht sieht beziehungsweiße mit Sternchen verdeckt werden ) Passwortabfrage und einer Eingabe für den User-Name. Das mit der verdeckten Passwortabfrage habe ich bereits hinbekommen aber mit dem User-Name nicht.
Mein Code sieht bis jetzt so aus:
Kann mir jemand helfen so das es ein Programm mit verdeckter Passwortabfrage und User-Name ist?
Vielen Dank schon mal
Liebe Grüße
sorry..., aber:
Ich lese/verarbeite/teste/korrigiere keine Quellcodes, welche als Screenshots angegeben werden.
Füge Code in eine Codebox (</>) ein.
Vielen Dank deiner Antwort alles gut echt danke der Mühe. Geht es irgendwie anders ich probiere auch andauernd schon?
Da war lediglich ein Hinweis.... Es ist für mich extrem nervig jedesmal Code von einem Bild abzutippen. ist es so schwer Code zu kopieren?
Okay, tut mir leid wegen Kopierern. Ich mach das auf einen anderen Laptop wo ich nicht angemeldet bin sorry. Hab aber jetzt endlich eine Lösung gefunden. Danke der Hilfe sehr nett
1 Antwort
Choice kann nur Buchstaben und Zahlen entgegennehmen jedoch kein Enter und keine Sonderzeichen.
Dein Code mit den Zahlen klappt nur, weil das "q" die Eingabe abschließt. Für Deine 11 Ziffern benötigst du bereits 11 if-vergleiche für alle Buchstaben und Ziffern benötigt man 62 if-Zeilen.
Meine Lösung ist da viel eleganter. Diese Missbraucht den Replace-Befehl um ein einzulesen. (eigentlich erwartet der replace-Befehl in der von mir verwendeten Art lediglich die Eingabe einer beliebigen Taste wenn die Diskette gewechselt wurde. Das eigentlich "Unschöne" dabei die gedrückte Taste wird angezeigt:
replace.exe ? . /u /w
...und genau das erlaubt uns diesen Tastendruck in eine Variable einzulesen.
getKey.cmd
:loop
rem find /n /v "" dient dazu auch das "" (also nichts) einzufangen um Enter zu "lesen"
for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "Key=%%~.")
echo Du hast die Taste "%Key%" gedrueckt
goto :loop
der Rest ist banal:
HiddenInput.cmd
@echo off
::Main
rem Text ohne Zeilenvorschub ausgeben...
<nul set /p "=Gib den Nutzernamen ein :"
call :getStringHidden _User
echo Du hast "%_User%" eingegeben
echo:
<nul set /p "=Gib dein Passwort ein :"
call :getStringHidden _Passwort
echo Du hast "%_Passwort%" eingegeben
echo:
rem hier innerhalb des Main -Bereichs Dein ganzer Kram
pause
::endMain
exit /b
::: Subroutines ::::
:getStringHidden %1=Variablename
set "_Accumulator="
:loop
for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "Key=%%~.")
if "%Key%"=="" (
rem wenn "Enter" also "" gedrückt Buchstabensammler (%_Accumulator%) an im Parameter %~1 übergebenen VariablenNamen zuweisen
set "%~1=%_Accumulator%"
rem weil <nul set /p "=*" nie eine Zeilenvorschub macht, diesen jetzt auslösen
echo:
exit /b
)
rem schreibe * immer ans end der gleichen Zeile
<nul set /p "=*"
rem füge %Key% der Variable %_Accumulator% hinzu
set "_Accumulator=%_Accumulator%%Key%"
goto :loop
exit /b
...sieht nur so viel aus wohne Kommentare sind es weniger Zeilen, als Dein Monster:
@echo off
<nul set /p "=Gib den Nutzernamen ein :"
call :getStringHidden _User
echo Du hast "%_User%" eingegeben
echo:
<nul set /p "=Gib dein Passwort ein :"
call :getStringHidden _Passwort
echo Du hast "%_Passwort%" eingegeben
echo:
pause
exit /b
::: Subroutines ::::
:getStringHidden %1=Variablename
set "_Accumulator="
:loop
for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "Key=%%~.")
if "%Key%"=="" (
set "%~1=%_Accumulator%"
echo:
exit /b
)
<nul set /p "=*"
set "_Accumulator=%_Accumulator%%Key%"
goto :loop
exit /b
..und natürlich kann man damit auch Menüs basteln...
Daher kommt eigentlich der versteckte Input (habe bei mir selbst geklaut😅)
Menu.cmd
@echo off
rem Umlaute richtig darstellen.
chcp 65001>nul
rem Macro %getKey% initialisieren ein Macro beqemer zu verwenden, als jedesmal dieses Monsterzeile zu schreiben.
set "getKey=for /f "tokens=2 delims=] skip=1" %%. in ('replace.exe ? . /u /w ^|find /n /v ""') do (set "getKey.Key=%%~.")"
rem test...
:MainMenu
echo:
echo Waehle :
echo [Enter] blah ^| [X] Batch Verlassen
echo [A] muh ^| [D] Lorem
echo [Y] iwas ^| [R] Rummel
echo [1]rumpel ^| [9] Miff
:Frage
%getKey%
rem eien Zeile für viele Verzweigungen
rem im in-Block können Normale Zeichen (Buchstaben und Zahlen) durch Komma oder Leerzeichen getrennt aufgelistet werden. (keine Umlaute))
for %%a in ( A,D,1,9,Y,R) do (if /i "%getKey.Key%"=="%%a" call :Label%%a)
rem Zeichen, welche nicht in einm Label vewendet werden dürfen müssen wie gehabt einzeln mit if abgefragt werden
if "%getKey.Key%"=="" call :LabelEnter
rem oder vom Standartvorgehen (hier call :Label%%a) abweichende Behandlungsroutinen
if /i "%getKey.Key%"=="X" goto :Ende
rem wenn keine der vorgesehenen Tasten, wieder zum Einlesen springen
goto :frage
:Ende
echo ...und Tschüß
timeout 3 >nul
exit /b
:::: Subroutinen :::::
:LabelEnter
echo blah und Blubb
echo maus und katz jagt hund
echo:
exit /b
:LabelA
echo muh und Mäh
echo schuhu
echo:
exit /b
:LabelD
echo lorem ipsum
echo Mangni est Pumuckl
echo:
exit /b
:Label1
echo Rumpelheinzchen seiner Oma ihr Hund
echo:
exit /b
:Label9
echo Miff maff mupp
echo:
exit /b
:LabelY
echo keine Ahnung
echo:
exit /b
:LabelR
echo Ägypten?
echo:
exit /b