Batch Set/p variable?
Kann mir Jemand Helfen ich möchte Folgendes tun: zuerst soll dass Batchscript aus Zwei Dateien 2 Passwortteile Nehmen und sie andersrum zusammenfügen, darauf soll dann der Benutzer dass Passwort Eingeben und Wenn es richtig ist soll er zur Sprung Marke TRUE_INPUT und wenn es Falsch ist zur Sprungmarke WRONG_INPUT aber wenn ich dass Skript starte Passiert folgendes: dort steht wie Gewollt Passwort: aber egal ob ich es richtig oder Falsch eingebe er springt immer zur Sprungmarke WRONG_INPUT und wenn ich danach die Tasten drücke steht dort: Test 1 und danach Test2!ich habe Getestet ob es funktioniert, Ich Weiß nicht woran es Liegt Ich hoffe ihr könnt mir Helfen! hier der Code:
:BECOME_DATA
for /f "tokens=1,2 delims==" %%A in (%FULL_PATH_WINDOW_PASS2%) do (
set "key=%%A"
set "value=%%B"
if "!key!"=="PASSPART2" (
set "PASSPART2=!value!"
)
)
goto BECOME_DATA2
:BECOME_DATA2
for /f "tokens=1,2 delims==" %%A in (%FULL_PATH_WINDOW_PASS1%) do (
set "key=%%A"
set "value=%%B"
if "!key!"=="PASSPART1" (
set "PASSPART1=!value!"
)
)
goto CREATEPASS
:CREATEPASS
SET CRYPTED_PASS=!PASSPART2!!PASSPART1!
Goto LASTLOADING
:LASTLOADING
cls
Color 02
SET TODO=Klicken sie zum fortfahren...
SET ACTIVITY=schritt 6/6
SET LOADPROGRESS=100
echo ==========================================
echo Laden erfolgreich. (Fortschritt:%LOADPROGRESS%)
echo (%TODO%) (%ACTIVITY%)
echo ==========================================
Color 03
echo druecken sie ENTER um Fortzufahren
pause >NUL
goto SETSETTINGS
:SETSETTINGS
Title %WINDOWTITLE% & %SHOW_LAUNCHER_PATH%
Color %STANDARD_COLOR%
mode con: cols=%MODE_COLS% lines=%MODE_LINES%
goto WINDOW_TEXT
:WINDOW_TEXT
Set /P PASSINPUT="Passwort: "
if "%PASSINPUT%"=="%CRYPTED_PASS%" (
goto TRUE_INPUT
) else (
goto WRONG_INPUT
)
:WRONG_INPUT
echo test1
pause
:TRUE_INPUT
echo test2
pause
1 Antwort
naja Verschlüsselung ist was anderes😁🤪
Irgendwie fehlen essenzielle Zeilen damit !DelayedExpansionVariablen! funktionieren.
setlocal EnableDelayedExpansion &rem auf diese Zeile kommt es an
set "tst=blub"
(
set "tst=%tst%blah"
echo undelayed : %tst%
echo delayed : !tst!
)
DelayedExpansion sollte man möglichst meiden, da diese besonders bei Variablen mit Nutzereingaben tückisch ist (der Nutzer könnte ein Ausrufezeichen eingeben welches jedoch von !Variablen! "verschluckt" wird)
Allerdings kannst Du dir den ganzen Murks mit dem "if" im Klammerblock sparen. Das Speichern/Einlesen von Variablen geht viel einfacher.
set "var_1=blubb"
set "var_2=blah"
rem alle Variablen(namen) die mit var_ beginnen in eine Datei speichern
set "var_" >"meineDatei.txt"
rem alle in der datei gespeicherten variablen einlesen
for /f "usebackq tokens=*" %%a in ("meineDatei.txt") do (set "%%a")
Völliger Blödsinn, in die nächste Zeile springen:
goto label
:label
..was soll das bringen?
Allgemeiner Ratschlag : Verzierungen/Color/CLS erst in ein Script einfügen, wenn der wichtige Code reibungslos funktioniert!!!
Ich lasse mal den ganzen Schnickschnack weg und konzentriere auf das Wesentliche.
pass.txt
PASSPART1=blubb
PASSPART2=blah
get_passwort.cmd
@echo off
chcp 65001 >nul
set "FULL_PATH_WINDOW_PASS=C:\dein Pfad\pass.txt"
rem Variablen direkt aus Datei einlesen. Du brauchst dich nicht um um Variablennamen=value zu kümmern
for /f "usebackq tokens=*" %%a in ("%FULL_PATH_WINDOW_PASS%") do (set "%%a")
set "pass" &rem zur Demo mal anzeigen
rem passwortteile vertauscht zusammenfügen
set "CRYPTED_PASS=%PASSPART2%%PASSPART1%"
set /p "PASSINPUT="Passwort: "
if "%PASSINPUT%"=="%CRYPTED_PASS%" (
goto :TRUE_INPUT
) else (
goto :WRONG_INPUT
)
:WRONG_INPUT
echo Falsches Passwort!
pause
exit /b
:TRUE_INPUT
echo Richtig
pause
Natürlich ist es Käse Passwörter im Klartext zu speichern.
Passwörter speichert man verschlüsselt als Hashwert. Hashwerte (Prüfsummen) sind nicht auf das Original rückführbar!
create_PaswortHasch.cmd
@echo off
chcp 65001 >nul
set "tempfile=%temp%\dateiname.irgendeine.Endung" &rem völlig egal, da diese Datei innerhhalb millisekunden wieder gelöscht wird
set "PW_HashFile=PasswortHash.txt"
rem lies passwort von der Tastatur (darf auch Sonderzeichen enthalten)
set /p "Raw_Passwort= Enter your Passwort for encryption:"
rem schreibe dieses in eine temporäre Datei
>"%tempfile%" echo "%Raw_Passwort%"
set "Raw_Passwort=" &rem Variable gleich wieder löschen!
rem erzeuge Hash der Datei und speichere diesen wir brauchen nur die 2.Zeile. Die temporäre Datei wird sofort nach dem hashen gelöscht!
for /f "skip=1 tokens=*" %%a in ('CertUtil -hashfile "%tempfile%" SHA256 ^&del "%tempfile%"') do (
>"%PW_HashFile%" echo %%a
echo der Hash für das eingegebne Passwort:
echo %%a
goto :break
)
:break
pause
compare_crypted_Paswort.cmd
@echo off
chcp 65001 >nul
set "tempfile=%temp%\irgenwas.tmp"
set "PW_HashFile=PasswortHash.txt"
rem Hash aus Datei einlesen
for /f "usebackq tokens=*" %%a in ("%PW_HashFile%") do (set "True_PW_Hash=%%a")
rem passwort abfragen
set /p "PW_Input=Enter your Passwort:"
>"%tempfile%" echo "%PW_Input%"
set "PW_Input="
rem ...und wie gehabt hashen aber diesmal in eien variable
for /f "skip=1 tokens=*" %%a in ('CertUtil -hashfile "%tempfile%" SHA256 ^&del "%tempfile%"') do (
set "PW_InputHash=%%a" &rem in variable speichern
goto :break
)
:break
if "%PW_InputHash%"=="%True_PW_Hash%" (
goto :TRUE_INPUT
) else (
goto :WRONG_INPUT
)
:WRONG_INPUT
echo Falsches Passwort!
pause
exit /b
:TRUE_INPUT
echo Richtig
)
pause
das ganze ist natürlich nur Spielerei, da man einfach nur die Batch editieren muss um die Passwortabfrage zu umgehen.
Ein letzes Wort noch...
Vergiss Batch und verwende Powershell!