Batch Variablenvergleich
Habe mal wieder ein Problem mit Batch
Hallo Liebe adminstrator.de-Gemeinde,
heute saß ich so rum und habe gedacht, ich schreibe ein Programm zum ver- und entschluesseln von Text. Gesagt getan. Es funktioniert auch alles. Nur eins nicht.
Der Verglech meiner 2 numerischen Variablen. Ich hab wirklich keine Ahnung woran das liegen kann.
Hier mein Code.
Erklärung:
Zuerst werden die "Keys" geholt, die notwendig sind um das Ganze zu entschlüsseln. Das beruht darauf, dass jeder Buchstabe eine Zufallszahl bekommt. Zusätzlich wird noch ein Code generiert. Nun werden Buchstabe und Code multipliziert und heraus kommt unsere Variable crypt_num (was ich gerade beschreibe, tut eine andere Batch. Und zwar richtig)
Mein Problem liegt in dem letzten Block. Ich habe mir mal ein paar werte ausgeben lassen und tata.
!number! und !A_g! sind gleich. Aber wieso setzt er nicht sign auf A??
achja der text der hier verschluesselt worden ist ist "ABCDEFG" deshalb habe ich mir diese Buchstaben anzeigen lassen, damit ich manuell überprüfen kann ob das passt. Und wenn man sich es anschaut. es passt
Hier mal ein Bild von dem was passiert
Hallo Liebe adminstrator.de-Gemeinde,
heute saß ich so rum und habe gedacht, ich schreibe ein Programm zum ver- und entschluesseln von Text. Gesagt getan. Es funktioniert auch alles. Nur eins nicht.
Der Verglech meiner 2 numerischen Variablen. Ich hab wirklich keine Ahnung woran das liegen kann.
Hier mein Code.
@echo off & setlocal enabledelayedexpansion
IF "%1" == "" (
echo Ziehen Sie die zu entschluesselnde .txt auf die Decrypt.bat
pause > Nul
exit
)
set /p code1=<%cd%\Key\code
set /p a=<%cd%\Key\1
set /p b=<%cd%\Key\2
set /p c=<%cd%\Key\3
set /p d=<%cd%\Key\4
set /p e=<%cd%\Key\5
set /p f=<%cd%\Key\6
set /p g=<%cd%\Key\7
set /p h=<%cd%\Key\8
set /p i=<%cd%\Key\9
set /p j=<%cd%\Key\10
set /p k=<%cd%\Key\11
set /p l=<%cd%\Key\12
set /p m=<%cd%\Key\13
set /p n=<%cd%\Key\14
set /p o=<%cd%\Key\15
set /p p=<%cd%\Key\16
set /p q=<%cd%\Key\17
set /p r=<%cd%\Key\18
set /p s=<%cd%\Key\19
set /p t=<%cd%\Key\20
set /p u=<%cd%\Key\21
set /p v=<%cd%\Key\22
set /p w=<%cd%\Key\23
set /p x=<%cd%\Key\24
set /p y=<%cd%\Key\25
set /p z=<%cd%\Key\26
set /p A_g=<%cd%\Key\27
set /p B_g=<%cd%\Key\28
set /p C_g=<%cd%\Key\29
set /p D_g=<%cd%\Key\30
set /p E_g=<%cd%\Key\31
set /p F_g=<%cd%\Key\32
set /p G_g=<%cd%\Key\33
set /p H_g=<%cd%\Key\34
set /p I_g=<%cd%\Key\35
set /p J_g=<%cd%\Key\36
set /p K_g=<%cd%\Key\37
set /p L_g=<%cd%\Key\38
set /p M_g=<%cd%\Key\39
set /p N_g=<%cd%\Key\40
set /p O_g=<%cd%\Key\41
set /p P_g=<%cd%\Key\42
set /p Q_g=<%cd%\Key\43
set /p R_g=<%cd%\Key\44
set /p S_g=<%cd%\Key\45
set /p T_g=<%cd%\Key\46
set /p U_g=<%cd%\Key\47
set /p V_g=<%cd%\Key\48
set /p W_g=<%cd%\Key\49
set /p X_g=<%cd%\Key\50
set /p Y_g=<%cd%\Key\51
set /p Z_g=<%cd%\Key\52
set "datei=%1"
)
echo Es wird decodiert!! Bitte warten...
for /f %%i IN (%datei%) DO (
IF "%%i"=="." (
echo.|set /p=_t_>>tmp1
) ELSE (
set "crypt_num=%%i"
set /a number = crypt_num / code1
echo !crypt_num!
call :decrypt
)
IF "%%i"=="," echo. >>tmp1
)
for /F "delims=" %%a in (tmp1) do (
set "text=%%a"
set "text=!text: =!"
echo !text!>>tmp2
)
for /F "delims=" %%a in (tmp2) do (
set "text=%%a"
set "text=!text:_t_= !"
echo !text!>>decodiert.txt
)
del tmp1
del tmp2
Echo Decodierung abgeschlossen!!
pause > NUL
exit /b
:decrypt
echo crypt_num: !crypt_num!
echo Code: !code1!
echo Number: !number!
echo A_g: !A_g!
echo B_g: !B_g!
echo C_g: !C_g!
echo D_g: !D_g!
echo E_g: !E_g!
echo F_g: !F_g!
echo G_g: !G_g!
IF !number! EQU !A_g! set "sign=A" & echo test1
IF !number! EQU !B_g! set "sign=B" & echo test1
IF !number! EQU !C_g! set "sign=C" & echo test1
IF !number! EQU !D_g! set "sign=D" & echo test1
IF !number! EQU !E_g! set "sign=E" & echo test1
IF !number! EQU !F_g! set "sign=F" & echo test1
IF !number! EQU !G_g! set "sign=G" & echo test1
IF !number! EQU !H_g! set "sign=H" & echo test1
IF !number! EQU !I_g! set "sign=I" & echo test1
IF !number! EQU !J_g! set "sign=J" & echo test1
IF !number! EQU !K_g! set "sign=K" & echo test1
IF !number! EQU !L_g! set "sign=L" & echo test1
IF !number! EQU !M_g! set "sign=M" & echo test1
IF !number! EQU !N_g! set "sign=N" & echo test1
IF !number! EQU !O_g! set "sign=O"
IF !number! EQU !P_g! set "sign=P"
IF !number! EQU !Q_g! set "sign=Q"
IF !number! EQU !R_g! set "sign=R"
IF !number! EQU !S_g! set "sign=S"
IF !number! EQU !T_g! set "sign=T"
IF !number! EQU !U_g! set "sign=U"
IF !number! EQU !V_g! set "sign=V"
IF !number! EQU !W_g! set "sign=W"
IF !number! EQU !X_g! set "sign=X"
IF !number! EQU !Y_g! set "sign=Y"
IF !number! EQU !Z_g! set "sign=Z"
IF !number! EQU !a! set "sign=a"
IF !number! EQU !b! set "sign=b"
IF !number! EQU !c! set "sign=c"
IF !number! EQU !d! set "sign=d"
IF !number! EQU !e! set "sign=e"
IF !number! EQU !f! set "sign=f"
IF !number! EQU !g! set "sign=g"
IF !number! EQU !h! set "sign=h"
IF !number! EQU !i! set "sign=i"
IF !number! EQU !j! set "sign=j"
IF !number! EQU !k! set "sign=k"
IF !number! EQU !l! set "sign=l"
IF !number! EQU !m! set "sign=m"
IF !number! EQU !n! set "sign=n"
IF !number! EQU !o! set "sign=o"
IF !number! EQU !p! set "sign=p"
IF !number! EQU !q! set "sign=q"
IF !number! EQU !r! set "sign=r"
IF !number! EQU !s! set "sign=s"
IF !number! EQU !t! set "sign=t"
IF !number! EQU !u! set "sign=u"
IF !number! EQU !v! set "sign=v"
IF !number! EQU !w! set "sign=w"
IF !number! EQU !x! set "sign=x"
IF !number! EQU !y! set "sign=y"
IF !number! EQU !z! set "sign=z"
echo !sign!.
echo.|set /p=!sign!>>tmp1
set number=
set sign=
goto :eof
Erklärung:
Zuerst werden die "Keys" geholt, die notwendig sind um das Ganze zu entschlüsseln. Das beruht darauf, dass jeder Buchstabe eine Zufallszahl bekommt. Zusätzlich wird noch ein Code generiert. Nun werden Buchstabe und Code multipliziert und heraus kommt unsere Variable crypt_num (was ich gerade beschreibe, tut eine andere Batch. Und zwar richtig)
Mein Problem liegt in dem letzten Block. Ich habe mir mal ein paar werte ausgeben lassen und tata.
!number! und !A_g! sind gleich. Aber wieso setzt er nicht sign auf A??
achja der text der hier verschluesselt worden ist ist "ABCDEFG" deshalb habe ich mir diese Buchstaben anzeigen lassen, damit ich manuell überprüfen kann ob das passt. Und wenn man sich es anschaut. es passt
Hier mal ein Bild von dem was passiert
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157102
Url: https://administrator.de/forum/batch-variablenvergleich-157102.html
Ausgedruckt am: 22.12.2024 um 17:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo Zockerman,
schon erstaunlich wie kompliziert man ein einfaches Problem angehen kann!
Wie praktisch das der Schlüssel in 52 Datein verteilt wird.
Aber um zu deinem aktuellen Problem zu kommen, zum einen fehlt der Inhalt der 52 Dateien,
zum anderen tippe ich darauf, dass es nicht zu einem numerischen Vergleich kommt, weil in deinen Variabeln nämlich gar keine Zahl steht.
Ich vermute, dass am Ende noch ein Space hängt.
Ist aber leicht zu testen, einfach mal überall bei den Debugausgaben eine Raute dranhängen z.B. echo A_g: !A_g!#
Allerdings solltest du dir überlegen, ob das hier wohl der richtige Ansatz ist soviel Zeilen Code für ein paar Vergleiche zu verwenden.
Optimierte Grüße
jeb
schon erstaunlich wie kompliziert man ein einfaches Problem angehen kann!
Wie praktisch das der Schlüssel in 52 Datein verteilt wird.
Aber um zu deinem aktuellen Problem zu kommen, zum einen fehlt der Inhalt der 52 Dateien,
zum anderen tippe ich darauf, dass es nicht zu einem numerischen Vergleich kommt, weil in deinen Variabeln nämlich gar keine Zahl steht.
Ich vermute, dass am Ende noch ein Space hängt.
Ist aber leicht zu testen, einfach mal überall bei den Debugausgaben eine Raute dranhängen z.B. echo A_g: !A_g!#
Allerdings solltest du dir überlegen, ob das hier wohl der richtige Ansatz ist soviel Zeilen Code für ein paar Vergleiche zu verwenden.
Optimierte Grüße
jeb
Moin Zockerman,
das die Speicherung von noch mehr als einer Zahl zwischen 1 und 32767 unterstützt...
Ich sach' ma' so: Wenn doch ohnehin jede noch so kleine Datei auf den heutigen Speichermedien 16384 Byte belegt,
dann könntest du doch auch mehr als die bisher verbratenen max.7 Zeichen nutzen.
Oder halten dich dann deine Kumpels für ein wenig knauserig?
Grüße
Biber
Zitat von @Zockerman:
Aber was meinst du damit, dass der Inhalt meiner 52 Dateien fehlt?
Da stehen immer nur eine Zahl zwischen 1-32765 halt 16 bit^^
Ich will da jeb-the-batcher nicht vorgreifen, aber es könnte sein, dass ihm die Verwendung eines Dateiformats vorschwebt,Aber was meinst du damit, dass der Inhalt meiner 52 Dateien fehlt?
Da stehen immer nur eine Zahl zwischen 1-32765 halt 16 bit^^
das die Speicherung von noch mehr als einer Zahl zwischen 1 und 32767 unterstützt...
Ich sach' ma' so: Wenn doch ohnehin jede noch so kleine Datei auf den heutigen Speichermedien 16384 Byte belegt,
dann könntest du doch auch mehr als die bisher verbratenen max.7 Zeichen nutzen.
Oder halten dich dann deine Kumpels für ein wenig knauserig?
Grüße
Biber
Danke Biber,
du hast meine Gedanken vollkommen richtig erraten.
Uhh, da hab ich doch glatt auf dem Boden gelegen ... wenn das schon der intelligente Teil war ...
Aber mal im Ernst:
Man sollte den gesamten Schlüssel in eine Datei schieben z.B. einfach pro Key eine Zeile.
Dann kann man ganz toll mit einer FOR-Loop alle Schlüssel aus eben jener einlesen.
Wenn man dann noch statt einzelne Variablenamen zu vergeben ein (Pseudo)-Batcharray verwendet etwa key=3542 (Schlüssel für A), key[1]=24020, ...
wird das Suchen und Vergleichen im Vergleich gleich viel leichter, könnte man halt Versuchen (was für ein schönes Wortspiel).
Zudem kann ich nicht ganz erkennen wozu aus dem Buchstabenraum (so in etwa 52 an der Zahl) auf den Raum 1 bis 32765 gemappt wird.
Genau genommen gibt es so ziemlich genau 52 Schlüssel, da kann man dann auch einfach die Zahlen aus 1 bis 52 als Schlüssel nehmen.
Aber Zockermann, mir gefällt der Ansatz, er zeigt den richtigen Weg und das Verständnis für die zu lösenden Probleme.
Grüße
jeb
du hast meine Gedanken vollkommen richtig erraten.
Zitat von @Zockerman:
Hallo jeb
ich weiß, dass es viel zu viel Code ist und, dass ich die Zeilen kürzen kann, aber ich wollte zuerst die Intelligenz
programmieren und dann das minimieren anfangen.
Hallo jeb
ich weiß, dass es viel zu viel Code ist und, dass ich die Zeilen kürzen kann, aber ich wollte zuerst die Intelligenz
programmieren und dann das minimieren anfangen.
Uhh, da hab ich doch glatt auf dem Boden gelegen ... wenn das schon der intelligente Teil war ...
Aber mal im Ernst:
Man sollte den gesamten Schlüssel in eine Datei schieben z.B. einfach pro Key eine Zeile.
Dann kann man ganz toll mit einer FOR-Loop alle Schlüssel aus eben jener einlesen.
Wenn man dann noch statt einzelne Variablenamen zu vergeben ein (Pseudo)-Batcharray verwendet etwa key=3542 (Schlüssel für A), key[1]=24020, ...
wird das Suchen und Vergleichen im Vergleich gleich viel leichter, könnte man halt Versuchen (was für ein schönes Wortspiel).
Zudem kann ich nicht ganz erkennen wozu aus dem Buchstabenraum (so in etwa 52 an der Zahl) auf den Raum 1 bis 32765 gemappt wird.
Genau genommen gibt es so ziemlich genau 52 Schlüssel, da kann man dann auch einfach die Zahlen aus 1 bis 52 als Schlüssel nehmen.
Aber Zockermann, mir gefällt der Ansatz, er zeigt den richtigen Weg und das Verständnis für die zu lösenden Probleme.
Grüße
jeb
moin Zockerman,
nicht passend zur Überschrift aber bei dem worum es geht.
ein Ansatz für das kommplette Auslesen einer Zeichenfolge ( in einer zu de - codierenden Zeichenfolge / Datei ) ohne die Zeichenfolge in einzelne Zeilen in eine andere Datei zerlegen zu müssen ist hier beschrieben.
Es ging um diesen Atbash-Algorithmus
Gruß Phil
nicht passend zur Überschrift aber bei dem worum es geht.
ein Ansatz für das kommplette Auslesen einer Zeichenfolge ( in einer zu de - codierenden Zeichenfolge / Datei ) ohne die Zeichenfolge in einzelne Zeilen in eine andere Datei zerlegen zu müssen ist hier beschrieben.
Es ging um diesen Atbash-Algorithmus
Gruß Phil