Hex Zeichen mittels Batch in Dateien vergleichen
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.
MfG
knechtibus
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.
MfG
knechtibus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 123040
Url: https://administrator.de/contentid/123040
Ausgedruckt am: 20.11.2024 um 07:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo knechtibus!
Da ohnehin immer nach Text gesucht wird, ist es egal, ob dieser Text als Hexwert interpretiert werden kann ...
Grüße
bastla
Da ohnehin immer nach Text gesucht wird, ist es egal, ob dieser Text als Hexwert interpretiert werden kann ...
@echo off & setlocal
set "D1=D:\dat1.txt"
set "D2=D:\dat2.txt"
set "D3=D:\dat3.txt"
if exist "%D3%" del "%D3%"
for /f "usebackq" %%i in ("%D1%") do call :ProcessLine "%%i"
goto :eof
:ProcessLine
for /f %%i in ('find /i /c %1^<"%D2%"') do set "Anzahl=%%i"
if %Anzahl%==1 >>"%D3%" echo %~1
goto :eof
bastla
Hi,
wozu die Abfrage? Die Datei soll doch in jedem Fall weg.
wozu die Abfrage? Die Datei soll doch in jedem Fall weg.
06. if exist "%D3%" del "%D3%"
del "%D3%" 2>nul
Zitat von @knechtibus:
Das Problem nur ist das die Werte aus dat1 in dat2 nur als ASCII vorliegen(also
irgendwelche kryptischen Sonderzeichen).
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.
Ein FCB muss in jedem Fall angelegt werden, ob nun mit FindFirst oder mit EraseFile. Ich sehe in meiner Vorgehensweise keinen absichtlich produzierten Fehler.
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
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
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
Hallo knechtibus!
Dann versuch es mal damit:
Gespeichert werden muss das Script mit der Endung ".vbs". Falls in der "dat3.txt" der Hexcode aus "dat1.txt" stehen soll, in Zeile 15 "
Eine Erklärung dazu gibt's bei Bedarf später ...
Grüße
bastla
Dann versuch es mal damit:
Set fso = CreateObject("Scripting.FileSystemObject")
D1 = "D:\dat1.txt"
D2 = "D:\dat1.txt"
D3 = "D:\dat1.txt"
T = fso.OpenTextFile(D2).ReadAll
If fso.FileExists(D3) Then fso.DeleteFile(D3)
H = Split(fso.OpenTextFile(D1).ReadAll, vbCrLF)
For Each C In H
P = ""
For i = 1 To Len(C) Step 2
P = P & Chr("&H" & Mid(C, i, 2))
Next
X = InStr(T, P)
If X > 0 And X < Len(T) Then If InStr(X + 1, T, P) = 0 Then fso.OpenTextFile(D3, 8, True).WriteLine P
Next
WriteLine P
" durch "WriteLine C
" ersetzen.Eine Erklärung dazu gibt's bei Bedarf später ...
Grüße
bastla
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
Die Umwandlung muss natürlich scheitern, wenn der Ausgangs(Hex-)wert " @" lautet ...
Grüße
bastla
P.S.:
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 ...
Hallo knechtibus!
Grüße
bastla
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