Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch Variablenvergleich

Frage Entwicklung Batch & Shell

Mitglied: Zockerman

Zockerman (Level 1) - Jetzt verbinden

16.12.2010, aktualisiert 11:40 Uhr, 2678 Aufrufe, 5 Kommentare

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.
01.
@echo off & setlocal enabledelayedexpansion 
02.
IF "%1" == "" ( 
03.
echo Ziehen Sie die zu entschluesselnde .txt auf die Decrypt.bat 
04.
pause > Nul 
05.
exit 
06.
07.
set /p code1=<%cd%\Key\code 
08.
set /p a=<%cd%\Key\1 
09.
set /p b=<%cd%\Key\2 
10.
set /p c=<%cd%\Key\3 
11.
set /p d=<%cd%\Key\4 
12.
set /p e=<%cd%\Key\5 
13.
set /p f=<%cd%\Key\6 
14.
set /p g=<%cd%\Key\7 
15.
set /p h=<%cd%\Key\8 
16.
set /p i=<%cd%\Key\9 
17.
set /p j=<%cd%\Key\10 
18.
set /p k=<%cd%\Key\11 
19.
set /p l=<%cd%\Key\12 
20.
set /p m=<%cd%\Key\13 
21.
set /p n=<%cd%\Key\14 
22.
set /p o=<%cd%\Key\15 
23.
set /p p=<%cd%\Key\16 
24.
set /p q=<%cd%\Key\17 
25.
set /p r=<%cd%\Key\18 
26.
set /p s=<%cd%\Key\19 
27.
set /p t=<%cd%\Key\20 
28.
set /p u=<%cd%\Key\21 
29.
set /p v=<%cd%\Key\22 
30.
set /p w=<%cd%\Key\23 
31.
set /p x=<%cd%\Key\24 
32.
set /p y=<%cd%\Key\25 
33.
set /p z=<%cd%\Key\26 
34.
set /p A_g=<%cd%\Key\27 
35.
set /p B_g=<%cd%\Key\28 
36.
set /p C_g=<%cd%\Key\29 
37.
set /p D_g=<%cd%\Key\30 
38.
set /p E_g=<%cd%\Key\31 
39.
set /p F_g=<%cd%\Key\32 
40.
set /p G_g=<%cd%\Key\33 
41.
set /p H_g=<%cd%\Key\34 
42.
set /p I_g=<%cd%\Key\35 
43.
set /p J_g=<%cd%\Key\36 
44.
set /p K_g=<%cd%\Key\37 
45.
set /p L_g=<%cd%\Key\38 
46.
set /p M_g=<%cd%\Key\39 
47.
set /p N_g=<%cd%\Key\40 
48.
set /p O_g=<%cd%\Key\41 
49.
set /p P_g=<%cd%\Key\42 
50.
set /p Q_g=<%cd%\Key\43 
51.
set /p R_g=<%cd%\Key\44 
52.
set /p S_g=<%cd%\Key\45 
53.
set /p T_g=<%cd%\Key\46 
54.
set /p U_g=<%cd%\Key\47 
55.
set /p V_g=<%cd%\Key\48 
56.
set /p W_g=<%cd%\Key\49 
57.
set /p X_g=<%cd%\Key\50 
58.
set /p Y_g=<%cd%\Key\51 
59.
set /p Z_g=<%cd%\Key\52 
60.
set "datei=%1" 
61.
62.
 
63.
echo Es wird decodiert!! Bitte warten... 
64.
for /f %%i IN (%datei%) DO ( 
65.
IF "%%i"=="." ( 
66.
echo.|set /p=_t_>>tmp1 
67.
) ELSE ( 
68.
set "crypt_num=%%i" 
69.
set /a number = crypt_num / code1 
70.
echo !crypt_num! 
71.
call :decrypt 
72.
73.
IF "%%i"=="," echo. >>tmp1 
74.
75.
for /F "delims=" %%a in (tmp1) do ( 
76.
set "text=%%a" 
77.
set "text=!text: =!" 
78.
echo !text!>>tmp2 
79.
80.
for /F "delims=" %%a in (tmp2) do ( 
81.
set "text=%%a" 
82.
set "text=!text:_t_= !" 
83.
echo !text!>>decodiert.txt 
84.
85.
del tmp1 
86.
del tmp2 
87.
 
88.
Echo Decodierung abgeschlossen!! 
89.
pause > NUL 
90.
exit /b 
91.
 
92.
:decrypt 
93.
echo crypt_num: !crypt_num! 
94.
echo Code: !code1! 
95.
echo Number: !number! 
96.
echo A_g: !A_g! 
97.
echo B_g: !B_g! 
98.
echo C_g: !C_g! 
99.
echo D_g: !D_g! 
100.
echo E_g: !E_g! 
101.
echo F_g: !F_g! 
102.
echo G_g: !G_g! 
103.
IF !number! EQU !A_g! set "sign=A" & echo test1 
104.
IF !number! EQU !B_g! set "sign=B" & echo test1 
105.
IF !number! EQU !C_g! set "sign=C" & echo test1 
106.
IF !number! EQU !D_g! set "sign=D" & echo test1 
107.
IF !number! EQU !E_g! set "sign=E" & echo test1 
108.
IF !number! EQU !F_g! set "sign=F" & echo test1 
109.
IF !number! EQU !G_g! set "sign=G" & echo test1 
110.
IF !number! EQU !H_g! set "sign=H" & echo test1 
111.
IF !number! EQU !I_g! set "sign=I" & echo test1 
112.
IF !number! EQU !J_g! set "sign=J" & echo test1 
113.
IF !number! EQU !K_g! set "sign=K" & echo test1 
114.
IF !number! EQU !L_g! set "sign=L" & echo test1 
115.
IF !number! EQU !M_g! set "sign=M" & echo test1 
116.
IF !number! EQU !N_g! set "sign=N" & echo test1 
117.
IF !number! EQU !O_g! set "sign=O" 
118.
IF !number! EQU !P_g! set "sign=P" 
119.
IF !number! EQU !Q_g! set "sign=Q" 
120.
IF !number! EQU !R_g! set "sign=R" 
121.
IF !number! EQU !S_g! set "sign=S" 
122.
IF !number! EQU !T_g! set "sign=T" 
123.
IF !number! EQU !U_g! set "sign=U" 
124.
IF !number! EQU !V_g! set "sign=V" 
125.
IF !number! EQU !W_g! set "sign=W" 
126.
IF !number! EQU !X_g! set "sign=X" 
127.
IF !number! EQU !Y_g! set "sign=Y" 
128.
IF !number! EQU !Z_g! set "sign=Z" 
129.
IF !number! EQU !a! set "sign=a" 
130.
IF !number! EQU !b! set "sign=b" 
131.
IF !number! EQU !c! set "sign=c" 
132.
IF !number! EQU !d! set "sign=d" 
133.
IF !number! EQU !e! set "sign=e" 
134.
IF !number! EQU !f! set "sign=f" 
135.
IF !number! EQU !g! set "sign=g" 
136.
IF !number! EQU !h! set "sign=h" 
137.
IF !number! EQU !i! set "sign=i" 
138.
IF !number! EQU !j! set "sign=j" 
139.
IF !number! EQU !k! set "sign=k" 
140.
IF !number! EQU !l! set "sign=l" 
141.
IF !number! EQU !m! set "sign=m" 
142.
IF !number! EQU !n! set "sign=n" 
143.
IF !number! EQU !o! set "sign=o" 
144.
IF !number! EQU !p! set "sign=p" 
145.
IF !number! EQU !q! set "sign=q" 
146.
IF !number! EQU !r! set "sign=r" 
147.
IF !number! EQU !s! set "sign=s" 
148.
IF !number! EQU !t! set "sign=t" 
149.
IF !number! EQU !u! set "sign=u" 
150.
IF !number! EQU !v! set "sign=v" 
151.
IF !number! EQU !w! set "sign=w" 
152.
IF !number! EQU !x! set "sign=x" 
153.
IF !number! EQU !y! set "sign=y" 
154.
IF !number! EQU !z! set "sign=z" 
155.
echo !sign!. 
156.
echo.|set /p=!sign!>>tmp1 
157.
set number= 
158.
set sign= 
159.
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
64bafd2f7f397e63761f5a8cc807e3cd - Klicke auf das Bild, um es zu vergrößern
Mitglied: jeb-the-batcher
16.12.2010 um 15:21 Uhr
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
Bitte warten ..
Mitglied: Zockerman
16.12.2010 um 18:06 Uhr
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.

Vielen Dank für deine Hilfe. Nagut, dass mit dem Space konnte ich ja durch löschen von Werten in der Variable lösen.
Aber was meinst du damit, dass der Inhalt meiner 52 Dateien fehlt?

Da stehen immer nur eine Zahl zwischen 1-32765 halt 16 bit^^

Grüße
Zockerman
Bitte warten ..
Mitglied: Biber
16.12.2010 um 21:11 Uhr
Moin Zockerman,

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,
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
Bitte warten ..
Mitglied: jeb-the-batcher
16.12.2010 um 23:53 Uhr
Danke Biber,

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.

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[0]=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
Bitte warten ..
Mitglied: pieh-ejdsch
19.12.2010 um 15:40 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...