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
GELÖST

Einfache Dechiffrierung Decryptung von Buchstaben per Batch

Frage Entwicklung Batch & Shell

Mitglied: Vierus

Vierus (Level 1) - Jetzt verbinden

04.06.2011 um 21:40 Uhr, 5020 Aufrufe, 9 Kommentare

Hallo
ich habe ein Problem und weiß nicht wie ich es am besten angehen soll.
Wie das gemeint ist, kann man auf der Seite www.signifikant.de.to sehen.

Hallo
ich bin kein besonderst guter Coder und denke meist zu Kompliziert und würde erst mal alle Variablen mit set setzen um dann mit For jeden Buchstaben einzeln auslesen darum Bitte ich euch um mit Hilfe.
Also ich möchte ein Wort oder ein ganzen Text auf die Numerologie nach Pythagoras und der des Alphasystems Prüfen und wenn möglich die Worte in eine extra Text Datei Kopieren.

01.
:restart 
02.
echo *********************************************************** 
03.
echo ***********[1] für Numerologie nach Pythagoras  *********** 
04.
echo ***********[2] für Numerologie nach Alphasystem *********** 
05.
echo *********************************************************** 
06.
 
07.
set /p Auswahl=Wort Prüfen nach: 
08.
 
09.
if Auswahl=1 goto one 
10.
else 
11.
goto Fehler 
12.
 
13.
if Auswahl=2 goto two 
14.
else 
15.
goto Fehler 
16.
 
17.
:one 
18.
echo Numerologie nach Pythagoras 
19.
set /p wort=Gib hier das Wort ein: 
20.
echo %wort% > Wort.txt 
21.
 
22.
set A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, I=9, 
23.
J=1, K=2, L=3, M=4, N=5, O=6, P=7, Q=8, R=9, 
24.
S=1, T=2, U=3, V=4, W=5, X=6, Y=7, Z=8 
25.
 
26.
if %wort%=62 echo Nach der Numerologie nach Pythagoras ergibt das Wort: %wort% = 62pt 
27.
else 
28.
goto Falsch 
29.
 
30.
:two 
31.
echo Numerologie nach Alphasystem  
32.
set /p wort=Gib hier das Wort ein: 
33.
 
34.
set A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8, I=9, J=10, K=11, L=12, M=13, N=14, O=15, P=16, Q=17, R=18, 
35.
S=19, T=20, U=21, V=22, W=23, X=24, Y=25, Z=26 
36.
 
37.
if %wort%=43 echo Nach der Numerologie nach dem Alphasystem ergibt das Wort: %wort% = 43 
38.
else 
39.
goto Falsch 
40.
echo ende 
41.
Exit 
42.
 
43.
:Fehler 
44.
echo Gib eine Zahl 1 oder 2 !!! 
45.
goto restart 
46.
 
47.
:Falsch 
48.
echo Leider kein Treffer versuchs mit einem anderem Wort! 
49.
goto restart
Mitglied: Friemler
04.06.2011 um 22:57 Uhr
Hallo Vierus,

also Dein Pseudocode da oben hätte außer Fehlermeldungen werfen garnichts gemacht...

Aber naja, dafür verdanken wir Dir bzw. dieser Numerologischen Webseite die Erkenntnis, dass sich Deep Thought verrechnet hat und die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest nicht 42 sondern 43 ist.

Die Idee, ein Esoterisches Script zu schreiben, fand ich so skurril, dass ich es glatt gemacht habe.

Here we go!
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
set "Letters=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" 
07.
 
08.
 
09.
:Restart 
10.
cls 
11.
 
12.
echo *********************************************************** 
13.
echo ***********[1] für Numerologie nach Pythagoras  *********** 
14.
echo ***********[2] für Numerologie nach Alphasystem *********** 
15.
echo ***********[E] für Ende                         *********** 
16.
echo *********************************************************** 
17.
echo. 
18.
set "Choice=" 
19.
set /p "Choice=Wort prüfen nach: " 
20.
echo. 
21.
 
22.
if "%Choice%" equ "1" goto :Pythagoras 
23.
if "%Choice%" equ "2" goto :Alphasystem 
24.
if /i "%Choice%" equ "E" exit /b 
25.
goto :ErrInput 
26.
 
27.
 
28.
:Pythagoras 
29.
set "NumericTable=1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8" 
30.
echo Numerologie nach Pythagoras 
31.
goto :InputWord 
32.
 
33.
 
34.
:Alphasystem 
35.
set "NumericTable=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26" 
36.
echo Numerologie nach Alphasystem 
37.
 
38.
 
39.
:InputWord 
40.
set "Word=" 
41.
set /p "Word=Gib ein Wort ein: " 
42.
echo. 
43.
 
44.
set "TheWord=%Word%" 
45.
if "%TheWord%" equ "" goto :Restart 
46.
 
47.
 
48.
set /a Result=0 
49.
 
50.
:CalcLoop 
51.
  set "Char=%Word:~0,1%" 
52.
  set "Word=%Word:~1%" 
53.
 
54.
  if "%Char%" equ " " goto :CalcLoopEnd 
55.
 
56.
  set /a Cntr=1 
57.
 
58.
  for %%c in (%Letters%) do ( 
59.
    if /i "%Char%" equ "%%c" goto :FoundChar 
60.
    set /a Cntr+=1 
61.
62.
 
63.
  goto :ErrUnknownChar 
64.
 
65.
  :FoundChar 
66.
  for /f "tokens=%Cntr%" %%v in ("%NumericTable%") do set /a Result+=%%v 
67.
:CalcLoopEnd 
68.
if "%Word%" neq "" goto :CalcLoop 
69.
 
70.
 
71.
:Output 
72.
if "%Choice%" equ "1" ( 
73.
  if "%Result%" equ "62" ( 
74.
    echo Nach der Numerologie nach Pythagoras ergibt das Wort %TheWord% %Result% 
75.
  ) else ( 
76.
    goto :NoMatch 
77.
78.
79.
 
80.
if "%Choice%" equ "2" ( 
81.
  if "%Result%" equ "43" ( 
82.
    echo Nach der Numerologie nach dem Alphasystem ergibt das Wort %TheWord% %Result% 
83.
  ) else ( 
84.
    goto :NoMatch 
85.
86.
87.
 
88.
pause 
89.
goto :Restart 
90.
 
91.
 
92.
:ErrInput 
93.
echo Gib die Zahl 1 oder 2 ein!!! 
94.
pause 
95.
goto Restart 
96.
 
97.
 
98.
:ErrUnknownChar 
99.
echo Du hast ein unbekanntes Zeichen eingegeben! Nur Die Buchstaben von A bis Z sind erlaubt. 
100.
pause 
101.
goto :Restart 
102.
 
103.
 
104.
:NoMatch 
105.
echo Leider kein Treffer, versuche es mit einem anderen Wort! 
106.
pause 
107.
goto Restart
Viel Spass beim Wörterbuch berechnen
Friemler


[EDIT]
Komisch, Teufel und Liebe ergeben beide nach Pythagoras den Wert 24... Ich werde mich nie mehr verlieben!
[/EDIT]
Bitte warten ..
Mitglied: Vierus
04.06.2011 um 23:57 Uhr
Also echt Klasse man, so schnell und fertig WOW extra dickes THX.
Gruß Vierus

"set "Letters=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
Auf das wer ich nie gekomm.

"goto :CalcLoopEnd"
Wohin führt das den oder geht man so einfach nur an das ende von :CalcLoop

"set "Word="
Müsste ich doch nur in set "Word=echo < TEXT.TXT , ändern oder?

Habe noch mehr kleinere Projekte bei denen ich Hilfe gebrauchen könnte.

Die seite ist doch noch besser http://smart-fox.de.to/
Bitte warten ..
Mitglied: Friemler
05.06.2011 um 00:00 Uhr
Zitat von Vierus:
"goto :CalcLoopEnd"
Wohin führt das den oder geht man so einfach nur an das ende von :CalcLoop
Obacht geben, länger leben!

Zitat von Vierus:
"set "Word="
Müsste ich doch nur in set "Word=echo < TEXT.TXT , ändern oder?
Nein, nimm echo %Word% >> "Text.txt"

[EDIT] Sorry, jetzt weiß ich was Du meinst, Wörter aus einer Textdatei einlesen. Dann nimm
for /f "usebackq delims=" %%w in ("Text.txt") do ( 
  set "Word=%%w" 
  . hier das Wort dann verarbeiten und an verzögerte Variablenerweiterung denken. 
)
Pro Zeile ein Wort. Siehe mein Tutorial zur FOR-Schleife.
[/EDIT]

Friemler
Bitte warten ..
Mitglied: Vierus
06.06.2011 um 01:13 Uhr
Zitat von Friemler:
Obacht geben, länger leben!
Ach ja Zeile 67. face-plain

Dein Tutorial ist Spitze und echt mega groß aber um das zu verstehen Braüchte ich mehr Praxis Beispiele den so gut bin ich noch nicht.

Leider hänge ich an der Ausgabe des wortes mit:
01.
if "%Counter%" neq "0" set Skipon="skip=%Counter%" 
02.
 
03.
for /f %Skipon% %%w in ("test.txt") do ( 
04.
set "Word=%%w" & echo 
05.
)
klappts nicht, den da bekomm ich nur Test.txt raus und nicht das wort warum?
Die Klammern sind doch die Verzögerung oder?
Peace
Vierus
Bitte warten ..
Mitglied: Friemler
06.06.2011 um 01:53 Uhr
Hallo Vierus,

wenn Du mit FOR /F eine Datei einlesen willst, deren Name/Pfad Leerzeichen enthält, musst Du den Namen in Anführungszeichen setzen können. Deshalb hat sich MS (oder der Praktikant, der das FOR-Parsing programmiert hat) die Option USEBACKQ einfallen lassen. Das fehlt bei Dir, deshalb wird "test.txt" als Zeichenkette aufgefasst, die Du mit FOR /F zerlegen willst.

Du hast zwei Möglichkeiten:
1. Du schreibst
01.
if "%Counter%" neq "0" ( 
02.
  set ForOptions="usebackq skip=%Counter%" 
03.
) else ( 
04.
  set ForOptions="usebackq" 
05.
06.
 
07.
for /f %ForOptions% %%w in ("test.txt") do ( 
08.
  set "Word=%%w" 
09.
  set "TheWord=%%w" 
10.
  call :ProcessWord 
11.
12.
 
13.
exit /b 
14.
 
15.
 
16.
:ProcessWord 
17.
set /a Result=0 
18.
 
19.
:CalcLoop 
20.
21.
. Hier kommt dann der Code zur Berechnung aus meinem ursprünglichen Script 
22.
.
Wenn die Wörter Leerzeichen enthalten können sollen, muss es set ForOptions="usebackq skip=%Counter% delims=" bzw. set ForOptions="usebackq delims=" heißen. Das Unterprogramm wird aufgerufen, um Probleme mit der zu frühen Erweiterung von Variablen zu umgehen bzw. um auf die verzögerte Variablenerweiterung verzichten zu können. Steht alles im Tutorial.

2. Du lässt die Anführungszeichen um test.txt weg. Das geht aber nur, wenn Pfad und Dateiname keine Leerzeichen enthalten, sonst wird das ganze als Liste von Dateinamen, die durch Leerzeichen getrennt sind, aufgefasst. Ohne usebackq kann man den Dateipfad nicht in Anführungszeichen setzen, da er sonst eben als Zeichenkette aufgefasst wird.

Gruß
Friemler
Bitte warten ..
Mitglied: Vierus
06.06.2011 um 03:28 Uhr
Oh man eh jetzt gehts. DAnke
Wenn das Wort aber 2 oder gar 3 sind geht es nicht mehr, mit tokens müsste er mir doch auch die ganze zeile ausgeben oder nicht?
Mit EOL=End Of Line gings nicht warum oder Trennt der dann nicht mehr?
Quasi so:
01.
if "%Counter%" neq "0" ( 
02.
  set ForOptions="usebackq DELIMS= tokens=1-3 skip=%Counter%" 
03.
) else ( 
04.
  set ForOptions="usebackq DELIMS= tokens=1-3" 
05.
06.
 
07.
for /f %ForOptions% %%w in ("test.txt") do ( 
08.
  set "Word=%%w%%x%%y" 
09.
  set "TheWord=%%w%%x%%y" 
10.
  set /a Counter+=1 
11.
  call :ProcessWord 
12.
)
wenn der Text z.b. = "das allsehende Auge = 62 pt" oder "buy the book = 43 pt" ist.
Bitte warten ..
Mitglied: Friemler
06.06.2011 um 08:37 Uhr
Hallo Vierus,

wenn Du delims= schreibst, also festlegst, dass kein Zeichen als Trennzeichen gelten soll, ist die Option tokens= sinnfrei. Wenn es keine Trennzeichen gibt, gibt es auch nur ein Token und das wird sowieso verarbeitet.

Die Option eol= gibt (ein) Zeichen an, bei deren/dessen Auftauchen in den Eingabedaten die Verarbeitung abgebrochen wird. Standardmäßig ist das das Semikolon. Wenn Du keine Semikolons in den Eingabedaten hast, kannst Du eol also vergessen.

Dass mit skip=x x Zeilen vom Anfang der Datei übersprungen werden, weißt Du ja wohl...

01.
if "%Counter%" neq "0" ( 
02.
  set ForOptions="usebackq skip=%Counter% delims=" 
03.
) else ( 
04.
  set ForOptions="usebackq delims=" 
05.
06.
 
07.
for /f %ForOptions% %%w in ("test.txt") do ( 
08.
  set "Word=%%w" 
09.
  set "TheWord=%%w" 
10.
  call :ProcessWord 
11.
)
sollte eigentlich funktionieren. Wenn nicht, liegt Dein Fehler an anderer Stelle. Führe als ersten Befehl in ProcessWord doch mal echo %Word% aus.

In Deiner Schleife hast Du noch set /a Counter+=1 stehen. Das macht keinen Sinn, falls Du damit die Anzahl der Zeilen, die übersprungen werden sollen, verändern willst. Die Veränderung von Counter wird in den ForOptions aus zwei Gründen nicht berücksichtigt. Herauszufinden, welche das sind, überlasse ich Dir.

Wenn in der Textdatei wirklich
01.
das allsehende Auge = 62 pt
steht, bekommst Du wegen dem Gleichheitszeichen und den Ziffern Probleme, dafür gibt es ja keinen Zahlencode.

Aber eigentlich bin ich kein Wiederkäuer, die stehen bei Bauer Paul im Stall. Alles was ich Dir in diesem und dem letzten Posting gesagt habe, steht in meinem Tutorial. Ich habe das Teil geschrieben, um genau dieses ewige Wiederholen von Antworten auf immer gleiche Fragen zu vermeiden, das nervt mich. Lies das Tutorial!!

Gruß
Friemler
Bitte warten ..
Mitglied: Vierus
08.06.2011 um 17:22 Uhr
Hallo Friemler

Als erstes möchte ich dir Danken den das Programm das sich jemand gewünscht hat, ist fertig.
Und als Zweites, klaro wirft ein fertiges Script Fragen auf.
Gerade bei mir Anfänger und dein Tutorial lese ich Aufmerksam immer und immer wieder, dennoch bleiben auch da für mich Fragen offen.
(Wie z.b. jetzt erst erkannt delims=kein Zeichen=Leerzeichen Peinlich OMG das ist ja wie "drücken Sie eine Beliebige Taste" und man sucht dann wo die ist. lol)
Die Text Datei enthielt nur die Worte:
"das allsehende Auge"
Also lag der Fehler bei mir den ich habe einen Einsprung falsch gesetzt und noch ein paar andere kleinere Fehler gefunden.
Naja bei so vielen hin und her gespringe kann das wohl mal passieren.

Der counter wurde nicht ausgeführt weil (ich habe keine Ahnung. AAAAHHHH ertappt lol) aber ich Versuchs mal damit:
-weil rechen Operationen nicht ausgeführt werden in einer schleife
-weil die schleife öfter durchläuft und der Counter somit sinnlos wäre

Ich habe es fertig gestellt und als EXE kompiliert diese kannst du oder andere hier Downloaden.
http://www.files.to/get/12176/2qlsgwotnf

Folgende Verbesserungen habe ich noch gemacht:
- Hilfe Datei
- Ergebnis Ausgabe in eine TXT
- einlesen aus TXT in schleife bis zum letzten Wort
- Wörter hinzufügen zur TXT

Folgendes würde mich noch Interessieren zu deinen Befehlen:
Set "Char=%Word:~0,1%"
Set "Word=%Word:~1%"
Splittet %Word:~1% die Worte
und
%Word:~0,1% Splittet dann die Buchstaben auf oder was machst du da?

Sorry für so blöde Fragen aber der Fehler liegt meistens im Detail verborgen und als Anfänger find ich den meistens nicht.
Nochmals Danke Friemler
Gruß Vierus
Bitte warten ..
Mitglied: Friemler
08.06.2011 um 19:27 Uhr
Hallo Vierus,

OK, dass sind zumindest teilweise Fragen, die erstens nicht im Tutorial beantwortet werden und zweitens auch nicht aufwändig zu beantworten sind und drittens hast Du Dich schon bemüht.

Zunächst mal: Ich beziehe micht hierbei auf diesen Kommentar von Dir.

Der Counter ist sinnlos, weil
  1. der Wert von %Counter% schon in Zeile 2 in die Variable %ForOptions% eingetragen wird, danach steht in %ForOptions% nur noch ein Zahlenwert.
  2. selbst, wenn Du die Variable %ForOptions% garnicht verwenden würdest und "usebackq DELIMS= tokens=1-3 skip=%Counter%" direkt in den Kopf der FOR-Schleife schreiben würdest, würde dieser Schleifen-Kopf nur einmal übersetzt und anstatt von %Counter% der dann aktuelle Wert dieser Variablen dort eingetragen. Spätere Änderungen, die innerhalb der Schleife durch set /a Counter+=1 vorgenommen werden, wären wirkungslos. Und ja, dieser Befehl verändert wirklich den Inhalt von %Counter% innerhalb der Schleife, obwohl keine verzögerte Variablenerweiterung aktiviert ist. Benutzen kann man diesen Wert innerhalb der Schleife aber wiederum nur, wenn die verzögerte Variablenerweiterung eingeschaltet ist. Diese Logik versteht nur der Praktikant, der die Shell programmiert hat.

Ab hier beziehe ich mich auf mein ursprüngliches Script.

Set "Char=%Word:~0,1%" weist das erste Zeichen der Variablen Word an die Variable Char zu. Mit Set "Word=%Word:~1%" wird von Word das erste Zeichen abgeschnitten. Deshalb brauche ich zum Ausgeben des Wortes bei der Auswertung in Zeile 74 (Pythagoras) bzw. 82 (Alphasystem) meines Scripts eine Kopie von Word, die Variable TheWord. Siehe auch SET /?.

Der Algorithmus ist ungefähr so:
  1. Lese den ersten Buchstaben des Wortes in eine Variable (Char) ein. (Zeile 51)
  2. Schneide den ersten Buchstaben vom Wort ab. (Zeile 52)
  3. Wenn das ermittelte Zeichen ein Leerzeichen ist, springe zu Schritt 7, ans Schleifenende. (Zeile 54)
  4. Suche den ermittelten Buchstaben in der Liste der zugelassenen Buchstaben (%Letters%). Gehe Buchstabe für Buchstabe durch diese Liste und zähle für jeden Buchstaben einen Zähler (%Cntr%) hoch. Wenn der ermittelte Buchstabe gleich dem aktuell betrachteten aus der Liste ist, springe nach Schritt 6, Label FoundChar. (Zeilen 56 bis 61)
  5. Wenn das ermittelte Zeichen nicht in der Liste gefunden wurde, wird Zeile 63 ausgeführt, der Sprung zur Ausgabe einer Fehlermeldung und nachfolgendem Neustart des Programms.
  6. Nimm den Zähler, der in der Suchschleife hochgezählt wurde, und benutze ihn als Index in die Liste der numerischen Werte (%NumericTable%) und ermittele so den numerischen Wert des Buchstabens. Addiere diesen Wert auf den Wert von %Result%. (Zeile 66)
  7. Wenn die Variable Word noch Zeichen enthält, springe nach Schritt 1. (Zeile 67)

Die Schleife läuft also so lange, bis alle Buchstaben des Wortes in %Word% betrachtet wurden und dabei kein ungültiges Zeichen gefunden wurde.

Gruß
Friemler
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

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

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...