Batch verdeckte Passwortabfrage mit User-Name?

Erzesel  07.02.2022, 18:04

sorry..., aber:

Ich lese/verarbeite/teste/korrigiere keine Quellcodes, welche als Screenshots angegeben werden.

Füge Code in eine Codebox (</>) ein.

RaphaelN05 
Fragesteller
 07.02.2022, 19:31

Vielen Dank deiner Antwort alles gut echt danke der Mühe. Geht es irgendwie anders ich probiere auch andauernd schon?

Erzesel  07.02.2022, 19:40

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?

RaphaelN05 
Fragesteller
 07.02.2022, 20:33

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
RaphaelN05 
Fragesteller
 08.02.2022, 15:02

Vielen Dank der Hilfe

0