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

Hex Zeichen mittels Batch in Dateien vergleichen

Frage Entwicklung Batch & Shell

Mitglied: knechtibus

knechtibus (Level 1) - Jetzt verbinden

19.08.2009, aktualisiert 18.10.2012, 6413 Aufrufe, 21 Kommentare

Hallo miteinander,

ich habe ein kleines 3 Dateien Problem. In der Datei dat1.txt stehen mehrere Hexwerte untereinander,z.B.:

40000001
80000001
40000002
80000002
40000003
...
...

Nun soll in einer Datei dat2 nach genau diesen Hexwerten gesucht werden und wenn ein Wert nur einmal auftritt, soll dieser dann in die Datei dat3.txt kopiert werden. Hatte schonmal ein ähnliches Problem, da ging es aber um ganz normale ASCII-Zeichen. Hier ist es nun zwingend notwendig nach den jeweiligen Hexzeichen aus dat1.txt zu suchen.
Freue mich auf eure Antworten.

Mit freundlichen Grüßen
knechtibus
Mitglied: bastla
19.08.2009 um 12:36 Uhr
Hallo knechtibus!

Da ohnehin immer nach Text gesucht wird, ist es egal, ob dieser Text als Hexwert interpretiert werden kann ...
01.
@echo off & setlocal 
02.
set "D1=D:\dat1.txt" 
03.
set "D2=D:\dat2.txt" 
04.
set "D3=D:\dat3.txt" 
05.
 
06.
if exist "%D3%" del "%D3%" 
07.
for /f "usebackq" %%i in ("%D1%") do call :ProcessLine "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessLine 
11.
for /f %%i in ('find /i /c %1^<"%D2%"') do set "Anzahl=%%i" 
12.
if %Anzahl%==1 >>"%D3%" echo %~1 
13.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: 81825
19.08.2009 um 12:55 Uhr
Hi,
wozu die Abfrage? Die Datei soll doch in jedem Fall weg.

06. if exist "%D3%" del "%D3%"
01.
del "%D3%"  2>nul
Bitte warten ..
Mitglied: knechtibus
19.08.2009 um 13:18 Uhr
Hallo bastla,

vielen Dank für deinen Lösungsvorschlag. Das Problem nur ist das die Werte aus dat1 in dat2 nur als ASCII vorliegen(also irgendwelche kryptischen Sonderzeichen). Ich kann also nicht nur nach den Strings aus dat1 suchen sondern müsste irgendwie die ASCII zeichen als die Hexwerte die sie ja sind, interpretieren.

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: 81825
19.08.2009 um 13:43 Uhr
Zitat von knechtibus:
Das Problem nur ist das die Werte aus dat1 in dat2 nur als ASCII vorliegen(also
irgendwelche kryptischen Sonderzeichen).

Dann wäre es doch sicher sinnvoll, du würdest hier mal ein konkretes Beispiel vorlegen.
Bitte warten ..
Mitglied: bastla
19.08.2009 um 13:44 Uhr
@81825
wozu die Abfrage?
Obwohl ich ohnehin dazu neige, "quick & dirty" zu coden, habe ich trotzdem eine gewisse Hemmung, einen (wenn auch behandelten) Fehler vorsätzlich zu produzieren ...

... aber natürlich funktioniert Dein Vorschlag.

Grüße
bastla
Bitte warten ..
Mitglied: 81825
19.08.2009 um 13:47 Uhr
Ein FCB muss in jedem Fall angelegt werden, ob nun mit FindFirst oder mit EraseFile. Ich sehe in meiner Vorgehensweise keinen absichtlich produzierten Fehler.
Bitte warten ..
Mitglied: bastla
19.08.2009 um 13:48 Uhr
Hallo knechtibus!

Weshalb stellst Du die gesuchten Zeichen dann nicht auch gleich in der gewünschten Schreibweise in die "dat1.txt"?

Soferne, wie es sich für mich liest, in "dat2.txt" (ASCII?- / ANSI?- / Unicode?-)Zeichen stehen, ist es sinnvoller, VBS zu verwenden (wenn es dagegen keine Einwände gibt) ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
19.08.2009 um 13:49 Uhr
@81825
Ich sehe in meiner Vorgehensweise keinen absichtlich produzierten Fehler.
Warum dann das schamhafte "2>nul"?

Grüße
bastla
Bitte warten ..
Mitglied: 81825
19.08.2009 um 13:56 Uhr
Stimmt. Darauf könnte man verzichten. Wenn das in einem Batch mit mehreren Befehlen ausgeführt wird, sieht die Meldung "Datei nicht gefunden" sowieso niemand
Bitte warten ..
Mitglied: knechtibus
24.08.2009 um 10:18 Uhr
Hallo,

angeregte Diskussion scheint das ja hier zu sein Möchte euch auf jeden Fall für eure Ideen danken. Mit VBS hab ich leider null Erfahrung insofern fällt das erstmal flach oder etwas geschriebenes müsste mir erklärt werden Die Konvertierung des jeweiligen HEX Wertes in ein ASCII zeichen hab ich jetzt nochmal ausprobiert, klappt aber leider auch nicht. Naja mal schauen ob ich evtl. doch noch was finde.

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
24.08.2009 um 17:20 Uhr
Hallo knechtibus!

Solange Du nicht den Zusammenhang zwischen Datei1 und Datei2 (= die Codierung) geklärt hast und auch kein Beispiel der Datei2 postest (mit "Code"-Formatierung), wirst Du wohl tatsächlich selbst die Lösung finden müssen ...

Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
25.08.2009 um 09:02 Uhr
Hallo bastla,

entschuldige, dass hab ich wirklich noch nicht so richtig klar gemacht. Also die Datei 1 ist eine ganz normale .txt, die Datei 2 im Format .rf7 und das ist evtl. auch ein Problem. Die Werte in Datei 1 liegen wie folgt vor:

01.
40000001 
02.
80000001 
03.
40000002 
04.
80000002 
05.
40000003
Die .rf7 Datei mit dem Editor geöffnet präsentiert sich folgendermaßen, nur kryptische Sonderzeichen:

01.
      A   @          g 4  #                  ÿ                     A   €         g 4  #                  ÿ              
In Datei 2 sind die interessanten Zeichen das "@" + 3 Zeichen und das "€" + 3 Zeichen. Diese repräsentieren in diesem Fall die ersten beiden HEX-Werte aus Datei 1.
Tja so siehts aus, ich weiß nun nicht ob VBS das vollbringen kann die Werte aus dat1.txt in dat2.rf7 zu suchen und nur dann in dat3.txt zu kopieren, wenn sie nur 1 mal in dat2.rf7auftreten.
Ich hoffe der Zusammenhang ist nun etwas klarer geworden?!

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
25.08.2009 um 10:12 Uhr
Hallo knechtibus!

Dann versuch es mal damit:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
D1 = "D:\dat1.txt" 
03.
D2 = "D:\dat1.txt" 
04.
D3 = "D:\dat1.txt" 
05.
 
06.
T = fso.OpenTextFile(D2).ReadAll 
07.
If fso.FileExists(D3) Then fso.DeleteFile(D3) 
08.
H = Split(fso.OpenTextFile(D1).ReadAll, vbCrLF) 
09.
For Each C In H 
10.
    P = "" 
11.
    For i = 1 To Len(C) Step 2 
12.
        P = P & Chr("&H" & Mid(C, i, 2)) 
13.
    Next 
14.
    X = InStr(T, P) 
15.
    If X > 0 And X < Len(T) Then If InStr(X + 1, T, P) = 0 Then fso.OpenTextFile(D3, 8, True).WriteLine P 
16.
Next
Gespeichert werden muss das Script mit der Endung ".vbs". Falls in der "dat3.txt" der Hexcode aus "dat1.txt" stehen soll, in Zeile 15 "WriteLine P" durch "WriteLine C" ersetzen.

Eine Erklärung dazu gibt's bei Bedarf später ...

Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
25.08.2009 um 10:33 Uhr
Hallo bastla,

ich danke dir für deine Antwort. Zu aller erst: ich denke mal die drei Variablen die am Anfang benannt werden, sollen unterschiedlich sein ;) Das hab ich mal in meiner Unkenntnis interpretiert. Wenn ich das Script nun ausführe ackert mein Rechner ca. 5 Sekunden lang und dann kommt eine Fehlermeldung:

Runtime Error
Program: C:\WINNT\System32\WScript.exe
abnormal program termination

Könnte es daran liegen das eine der Dateien sehr groß ist?! (Die Datei dat2.rf7 ist ca. 50 MB groß)

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: knechtibus
25.08.2009 um 10:58 Uhr
Hallo bastla,

es lag wirklich an der Dateigröße, habs gerade nochmal mit einer kleineren Datei ausprobiert. Allerdings kaum ist das eine Problem behoben, zeigt sich auch gleich das nächste. Beim Ausführen wird folgende Fehlermeldung ausgegeben:

Skript: C:\Test_HEX.vbs
Zeile: 12
Zeichen: 9
Fehler: Typen unverträglich: '[string: "&H @"]'
Code: 800A000D
Quelle: Laufzeitfehler in VBScript

Damit kann ich leider nicht so viel anfangen

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
25.08.2009 um 14:42 Uhr
Hallo knechtibus!

Die Fehlermeldung deutet auf einen nicht als Hexwert interpretierbaren Inhalt der "dat1.txt" hin - in der angegebenen Scriptzeile werden jeweils 2 Zeichen zu einem 8-Bit-Hexwert kombiniert, mit der Funktion Chr() in das entsprechende (ANSI-) Zeichen umgewandelt und dem Suchstring P hinzugefügt.

Die Umwandlung muss natürlich scheitern, wenn der Ausgangs(Hex-)wert " @" lautet ...

Grüße
bastla

P.S.:
Zu aller erst: ich denke mal die drei Variablen die am Anfang benannt werden, sollen unterschiedlich sein ;)
Typischer Fall von Verschlimmbesserung - ich hatte ursprünglich Parameter verwendet, wollte das Script dann zum Testen vereinfachen und habe den Dateinamen beim Posten zwar noch an die entsprechenden Stellen kopiert, aber dann nicht mehr angepasst - sorry, aber Du hast ja richtig analysiert und korrigiert ...
Bitte warten ..
Mitglied: bastla
25.08.2009 um 14:46 Uhr
Kommentar nach oben verschoben ...
Bitte warten ..
Mitglied: knechtibus
25.08.2009 um 15:15 Uhr
Hallo bastla,

Die Fehlermeldung deutet auf einen nicht als Hexwert interpretierbaren Inhalt der "dat1.txt" hin

was so viel bedeutet wie? Das VBS mit den Werten aus dat1.txt nicht klar kommt? Kann man dem irgendwie abhilfe schaffen?

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: bastla
25.08.2009 um 15:23 Uhr
Hallo knechtibus!

Dass VBS mit den Werten aus dat1.txt nicht klar kommt?
Wenn in der "dat1.txt" nur Hexwerte stehen (genauer: alle Zeilen nur eine gerade Anzahl von Zeichen aus dem Bereich "0" bis "9" und "A" bis "F" bzw "a" bis "f" - also etwa keine Leerzeichen - enthalten), dürfte es kein Problem geben - zumindest werden Deine oben geposteten Beispielzeilen problemlos verarbeitet.

Grüße
bastla
Bitte warten ..
Mitglied: knechtibus
26.08.2009 um 08:21 Uhr
Hallo bastla,

ich hatte aus versehen noch ein @ in der dat1.txt zu stehen. Schön blöd, hätte ich auch selbst mal drauf kommen bzw. nachgucken können. Nun wird keine Fehler mehr angezeigt und die .vbs ausgeführt. Das Problem das jetzt noch besteht: Es wird trotz nur einmalig auftretenden HEX-Werten keine dat3.txt angelegt. Habe die HEX-Werte aus dat1.txt extra noch mit einem HEX-Editor in dat2.txt gesucht um sicher zu sein, dass diese wirklich nur einmal auftreten. Genau diese nur einmal auftretenden Werte sollen ja in die dat3.txt geschrieben werden. Das Script wird auf jeden Fall ausgeführt denn der Rechner arbeitet ein paar Sekunden und eine vorher erstellte, leere dat3.txt wird gelöscht.
Interpretiert er die HEX-Werte evtl. einzeln und nicht als die 4-Zeichen-Folge die sie eigentlich darstellen?

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Mitglied: knechtibus
01.09.2009, aktualisiert 18.10.2012
Hallo miteinander,

da es ja offensichtlich mit VBS besser zu realisieren ist, markiere ich diesen Beitrag mal als gelöst und es kann weiter in dem entsprechenden VBS Beitrag diskutiert werden.

http://www.administrator.de/forum/mit-vbs-hex-werte-aus-textdatei-ausle ...

Mit freundlichen Grüßen
knechtibus
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...