Mit Batch Passwort und Kennwort übereinstimmung suchen?

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

Erzesel  24.06.2019, 11:48

%username% ist eine vordefinierte Systemvariable und sollte nicht durch den Nutzer gesetzt werden.

Es ist zwar möglich, jedoch nicht ratsam.

@echo off
chcp 65001 >nul
echo die Systemvariable %%username%%=%username%
set "username=Rumpelheinzchen"
echo durch die Nutzervarable %%username%%=%username% überschrieben
echo ...und die Batch hat keine Möglichkeit mehr auf die Systemvariable zuzugreifen
pause

Besser %__username% oder etwas anderes benutzen.

1
timlg07  24.06.2019, 12:24
@Erzesel

🤦🏼‍♂️
Gut, dass hier immer jemand mitdenkt, wenn ich wieder unüberlegt etwas in den gutefrage-Editor tippe ^^

1
timlg07  24.06.2019, 12:41
@timlg07

Wäre schön, wenn man hier, wie etwa bei StackOverflow, seine Antworten ebenfalls editieren könnte...

0
Erzesel  24.06.2019, 13:05
@timlg07

...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.

1
2017Fragen 
Fragesteller
 30.06.2019, 00:24

und wie geht es mit meheren Benutzern?

0
timlg07  30.06.2019, 18:23
@2017Fragen

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`.

0
timlg07  02.07.2019, 15:41
@2017Fragen

Das heißt dann vermutlich, dass ich dir das Programm schreiben soll? 😅

Dann erkläre bitte genau, was du haben willst.

0
2017Fragen 
Fragesteller
 03.07.2019, 21:20
@timlg07

Kann ich dir die Batch dateien irgentwie senden? (sind 3)

0
timlg07  03.07.2019, 23:01
@2017Fragen

Habs bekommen. Ich versuch, dass ich mir vor m Urlaub noch Zeit nehme um das zu machen.

0
timlg07  04.07.2019, 18:09
@2017Fragen

Schau dir mal an, ob du mit meinem Code was anfangen kannst :)

0

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"
2017Fragen 
Fragesteller
 06.07.2019, 00:04

Naja eigentlich war es extra in meheren dateien aber dann kann ich dein code benutzen um meins umzuschreiben ^^

0
timlg07  06.07.2019, 19:22
@2017Fragen

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.

0
2017Fragen 
Fragesteller
 06.07.2019, 21:46
@timlg07

ja ich mache es schon in mehreren dateien weil ich es einfach übersichtlicher finde

0
timlg07  07.07.2019, 12:53
@2017Fragen

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 :)

0
2017Fragen 
Fragesteller
 07.07.2019, 22:19
@timlg07

naja es ist ja noch nur ein kleines batch projekt und ich möchte ja auch herausforderungen

0