Mit Batch Passwort und Kennwort übereinstimmung suchen?
Hallo,
ich experimentiere momentan etwas mit batch dateien und würde gerne wissen wie ich per batch gucken kann ob in einer txt Benutzername und Kennwort (untereinander) mit den eingegebenen sachen stimmen. Wie finde ich es raus?
2 Antworten
Für eine Datei "passwort.txt", die folgendermaßen aufgebaut ist:
benutzername
passwort
kann die Umsetzung in Batch z.B. so aussehen:
@echo off & setlocal enableDelayedExpansion
:main
REM Benutzer die Werte eingeben lassen:
set /p "username=Benutzername: "
set /p "password=Passwort: "
REM die Textdatei Zeile für Zeile auslesen und
REM auf Übereinstimmung mit der Eingabe prüfen
for /F "tokens=* delims=" %%L in (passwort.txt) do (
set /a i += 1
if !i! equ 1 if "%%L" neq "%username%" goto invalid
if !i! equ 2 if "%%L" neq "%password%" goto invalid
)
REM Eingabe stimmt mit gespeicherten Wörtern überein:
echo.Benutzername und Passwort korrekt.
pause&exit
REM Eingabe war falsch
:invalid
echo.Eingabe inkorrekt. Erneut versuchen.
pause
goto main
...ist doch toll wenn man auch mal Fettnäpfe hinterlassen kann😝🤣.
Was ich manchmal geflucht habe wenn User in anderen Foren Kommentare und Antworten "wegezogen" habe und der eigene Kommentar hing dann wie das Lallen eines Schwachsinnigen in einer sinnlichen Leere.
..das mit username ist mir auch schon in einer richtig "fetten" Batch-Javascript-Chimära passiert, und ich bin fast Irre geworden, warum das JScript nicht mehr auf den gewünschten Pfad zugreifen konnte.
Ich habe natürlich mit keiner Nervenfaser mehr meine eigene Variable gedacht...🤮 die munter durch alle Environ-Folgeinstanzen "vererbt" wurde.
Dann iterierst du ähnlich wie in meinem Codebeispiel über die Textdatei und schaust, ob du ein übereinstimmendes Paar findest. Oder du verwendest am besten gleich `findstr`.
Das heißt dann vermutlich, dass ich dir das Programm schreiben soll? 😅
Dann erkläre bitte genau, was du haben willst.
Kann ich dir die Batch dateien irgentwie senden? (sind 3)
Du könntest sie auf pastebin.com hochladen und hier den Link posten. Oder du schickst mir die Dateien als Textdateien per eMail.
Habs bekommen. Ich versuch, dass ich mir vor m Urlaub noch Zeit nehme um das zu machen.
Schau dir mal an, ob du mit meinem Code was anfangen kannst :)
Habe mir mal angeschaut, was du versucht hast umzusetzen und eine Batch geschrieben, die alle 3 bzw. 2 Funktionen vereint:
@echo off
set "_db=loginData.txt"
echo Willkommen.
echo;
choice /M "[A]nmelden oder [R]egistrieren?" /C AR
if %errorlevel% equ 2 goto register
if %errorlevel% equ 1 goto login
:register
cls
echo Registrierung.
call :getInput
REM check if username already exists
findstr /R /C:"^{ _username:'%_username%', _password:'" "%_db%" >nul && (
echo Benutzername existiert bereits. Waehle einen anderen.
pause
goto register
)
REM add user to the database
echo/{ _username:'%_username%', _password:'%_password%' },>>"%_db%"
REM make everything super secure
attrib +h "%_db%"
echo Registrierung erfolgreich.
echo Melden Sie sich an.
pause
goto login
:getInput
echo;
set /P "_username=Benutzernamen eingeben: > "
set /P "_password=Passwort eingeben: > "
if not "%_username%"=="" if not "%_password%"=="" exit /B 0
echo Die Felder wurden nicht vollstaendig ausgefuellt.
goto getInput
:login
cls
echo Anmeldung.
call :getInput
REM search login info
findstr /R /C:"^{ _username:'%_username%', _password:'%_password%' },$" "%_db%" >nul && (
echo Anmeldung erfolgreich.
timeout /t 1
goto main
) || (
echo Ihre Anmeldedaten sind nicht korrekt.
echo Versuchen Sie es erneut, oder registrieren Sie sich.
pause
goto login
)
exit /B 1
:main
cls
echo Dies ist der Passwortgeschuetzte Hochsicherheitsbereich der Batch :P
pause
exit
Was versuchst du denn damit abzusichern? Eventuell musst du den Pfad der Textdatei noch genauer definieren, z.B. so:
set "_db=%~dp0loginData.txt"
Naja eigentlich war es extra in meheren dateien aber dann kann ich dein code benutzen um meins umzuschreiben ^^
Warum denn jede Funktion in ne eigene Datei? Würde zumindest den kompletten Login in einer Datei behalten.
Aber du kannst meinen Code auch ganz einfach auf mehrere Dateien aufteilen ... musst das mit dem :getInput dann halt anders gestalten bzw. Code doppelt schreiben.
ja ich mache es schon in mehreren dateien weil ich es einfach übersichtlicher finde
Wenn es allein der Übersicht dienen soll, empfehle ich dir einen Editor wie Notepad++. Wenn man bei einem großen Projekt anfängt jede einzelne Funktion/Programmabschnitt in eine eigene Datei zu packen, ist das ziemlich schnell alles andere als übersichtlich :)
naja es ist ja noch nur ein kleines batch projekt und ich möchte ja auch herausforderungen
%username% ist eine vordefinierte Systemvariable und sollte nicht durch den Nutzer gesetzt werden.
Es ist zwar möglich, jedoch nicht ratsam.
Besser %__username% oder etwas anderes benutzen.