robin99
Goto Top

Passwort überprüfung

Hallo,

ich bin am ende ich weiß nicht was hier falsch ist:
@echo off
cls
echo Gebe Hier dein Passwort ein:
echo.
set /p %ppasswort%=
FOR /f %%f IN (config.txt) DO (
	if %ppasswort% equ %%f (
		cls
		echo Das Passwort ist richtig
		pause >nul
		goto settings
	)
	
	if not %ppasswort% equ %%f (
		:fpwd
		cls
		echo Das Passwort ist falsch
		set /a falschpasswd=%falschpasswd%+1
		if %falschpasswd%==3 (
			cls 
			echo Du hast 3 mal das falsche passwort einegegeben
			pause>nul
			exit
		) else goto fpwd
	) else exit
) else exit
Kann mir da jmd. weiterhelfen?
Danke :D

[Edit Biber] Codeformatierung ergänzt. [/Edit]

Content-Key: 268908

Url: https://administrator.de/contentid/268908

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: Dani
Dani 11.04.2015 um 22:56:28 Uhr
Goto Top
Moin,
nette Spielerei.. hebelt dir aber jeder ab der 10. Klasse innerhalb von ein paar Minuten aus.
Ich würde versuchen, über die NTFS-Sicherheit den berechtigen Benutzer/Gruppen das Schreib- und Änderungsrecht zuteilen.


Gruß,
Dani
Mitglied: Arano
Arano 12.04.2015 um 01:16:31 Uhr
Goto Top
Hi Robin,

1.
[...] ich weiß nicht was hier falsch ist
Und wir wissen nicht wie es richtig sein sollte !?
Was geht nicht, wie lautet die Fehlermeldung, was sollte passieren und was passiert statdessen, ...
Sprich mit uns oder lass uns in Ruhe ! face-wink

2.
Code-Tags für dein Script wären besser gewesen, sie mal nach den Formatierungshilfen für dieses Forum

3.
Wenn ich mich nicht täusche dann müsste diese eine Zeile doch etwas anders aussehen:
set /p %ppasswort%=
z.B. so:
set /p "ppasswort=Gebe hier bitte dein Passwort ein:"  
(habe kein Windows und kann es nicht testen)
Du willst doch schließlich die Variable mit genau diesem Namen (ppasswort) einen Wert zuweisen. Und nicht einer Variable die so heist wie der Wert aus der Variable ppasswort... oder etwa doch !?


~Arano
Mitglied: 114757
114757 12.04.2015 aktualisiert um 14:18:12 Uhr
Goto Top
Stichwort Delayed Expansion beim Setzen von Variablen innerhalb von Klammern

Probiers mal damit....
@echo off & setlocal enabledelayedexpansion
set /a falschpasswd=0
cls
echo.
:start
set /p ppasswort=Gebe Hier dein Passwort ein:
set /p passwordinfile=<config.txt
if "%ppasswort%" == "%passwordinfile%" (  
    cls
    echo Das Passwort ist richtig
    pause >nul
    goto settings
) else (
     cls
     echo Das Passwort ist falsch
     set /a falschpasswd +=1
     if !falschpasswd!==3 (
         cls 
         echo Du hast 3 mal das falsche Passwort eingegeben
         pause>nul
         exit
     ) else (
         Goto start
     )
)
Gruß jodel
Mitglied: Biber
Biber 12.04.2015 um 14:16:12 Uhr
Goto Top
Moin Robin99,

willkommen im Forum.

Ergänzend zu Arano und jodel32 noch ein paar Anmerkungen.
Richtig falsch ist, wie Arano geschrieben hat, deine Zeile
set /p %ppasswort%=

Da hier der Variablenname in Prozentzeichen eingeschlossen ist, diese Variable aber noch nicht definiert wurde, wird dieser Befehl halt vom CMD-Interpreter ausgeführt als
set /p =

Is' ja durchaus eine gültige Syntax, setzt aber auch keine Variable. face-wink

Führt in einer Konstellation zu einem eher peinlichen Fehlverhalten.
Wenn auch die Datei "config.txt" nicht existiert, dann wird die Zeile
if "%ppasswort%" == "%passwordinfile%" (
.. aufgelöst zu ..
if "" == "" (
... mit dem Ergebnis, dass der Benutzer überraschenderweise die Meldung "Das Passwort ist richtig" bekommt, egal was er/sie eingibt.
Also: die Existenz der Datei "config.txt" sollte mit "if exist config.txt" abgeprüft werden.
Und das Eingabe des Passworts geändert werden auf
set /p ppasswort=Gib hier dein Passwort ein:

Ansonsten:
- die definierten goto-Sprungsziele sollten auch existieren
- statt "exit" würde ich jeweils "goto :eof" nehmen, damit es sich sinnvoll am CMD-Prompt testen lässt.

Grüße
Biber