
93578
09.09.2010, aktualisiert um 14:45:15 Uhr
Per Batch in jeder Textdatei in einem Verzeichnis die ersten 6 Zeilen löschen und weiter unten nur die ersten 32 Zeichen lassen und den Rest löschen?
Hallo an alle Forum-Mitglieder! Ich bin auf Euere Hilfe angewiesen, da ich von Batch-Programmierung NULL Ahnung habe. 
Ich habe folgendes Problem:
unter Windows 7 Pro 64 bit habe ich einen Verzeichnis mit Textdateien (*.txt). Alle Dateien haben verschieden Namen. Jede Datei sieht aber so aus:
HASH
fd5e10a01b41d295ce401bb0e7d518d6;60dbffdf811f17da46a245ec07f916473be4cc64;0144ad4a534674df6201d8f4404f4a363491bb5b067a0aea9981d0b18c65f819;192512;c:\Dokumente und Einstellungen\User\Lokale Einstellungen\Temp\mProjector1640541402\Flash6MovieV2.3.1.1hj.mvx
f6dd9db721f119e871f458733ed00eec;90acbcb0ea49b3bfad9c6f122d57b46e68222a2c;6cd061252bb6c5477600008b9281f91e79abb5f1c97bda68933ce120b300c08a;1340;c:\Dokumente und Einstellungen\User\Anwendungsdaten\Mozilla\Firefox\Profiles\4dsuauhs.default\prefs.js
f6af34a89e055619ffca9f646b9dae20;7b1a88f4962da9cc5a6b6d14c984eb0475163140;1b39bbb0f3d946f73192e01d1d18d9021df60c3c5f9e80c18802d17e57ca7174;56705;c:\Dokumente und Einstellungen\User\Anwendungsdaten\Mozilla\Firefox\Profiles\4dsuauhs.default\extensions\{635abd67-4fe9-1b23-4f01-e679fa7484c1}\components\nsYahooDomBuilder.js
usw. (es folgen weitere Hash-Werte).
Ich will nun in allen Text-Dateien in diesem Verzeichnis nur die erste 32 Zeichen (also MD5 Hash-Werte) lassen und den Rest (inklusive die ersten 6 Zeilen) löschen. In der 7 Zeile soll nur MD5 bleiben. Es soll also ungefähr so aussehen:
MD5
fd5e10a01b41d295ce401bb0e7d518d6
f6dd9db721f119e871f458733ed00eec
f6af34a89e055619ffca9f646b9dae20
Kann mir dabei jemand helfen? Danke!
Philipp
Ich habe folgendes Problem:
unter Windows 7 Pro 64 bit habe ich einen Verzeichnis mit Textdateien (*.txt). Alle Dateien haben verschieden Namen. Jede Datei sieht aber so aus:
HASH
- initials=Hash-Werte
- date_loaded=09.09.2010
- vendor=FLV
- package=Player
- version=2
fd5e10a01b41d295ce401bb0e7d518d6;60dbffdf811f17da46a245ec07f916473be4cc64;0144ad4a534674df6201d8f4404f4a363491bb5b067a0aea9981d0b18c65f819;192512;c:\Dokumente und Einstellungen\User\Lokale Einstellungen\Temp\mProjector1640541402\Flash6MovieV2.3.1.1hj.mvx
f6dd9db721f119e871f458733ed00eec;90acbcb0ea49b3bfad9c6f122d57b46e68222a2c;6cd061252bb6c5477600008b9281f91e79abb5f1c97bda68933ce120b300c08a;1340;c:\Dokumente und Einstellungen\User\Anwendungsdaten\Mozilla\Firefox\Profiles\4dsuauhs.default\prefs.js
f6af34a89e055619ffca9f646b9dae20;7b1a88f4962da9cc5a6b6d14c984eb0475163140;1b39bbb0f3d946f73192e01d1d18d9021df60c3c5f9e80c18802d17e57ca7174;56705;c:\Dokumente und Einstellungen\User\Anwendungsdaten\Mozilla\Firefox\Profiles\4dsuauhs.default\extensions\{635abd67-4fe9-1b23-4f01-e679fa7484c1}\components\nsYahooDomBuilder.js
usw. (es folgen weitere Hash-Werte).
Ich will nun in allen Text-Dateien in diesem Verzeichnis nur die erste 32 Zeichen (also MD5 Hash-Werte) lassen und den Rest (inklusive die ersten 6 Zeilen) löschen. In der 7 Zeile soll nur MD5 bleiben. Es soll also ungefähr so aussehen:
MD5
fd5e10a01b41d295ce401bb0e7d518d6
f6dd9db721f119e871f458733ed00eec
f6af34a89e055619ffca9f646b9dae20
Kann mir dabei jemand helfen? Danke!
Philipp
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150699
Url: https://administrator.de/forum/per-batch-in-jeder-textdatei-in-einem-verzeichnis-die-ersten-6-zeilen-loeschen-und-weiter-unten-nur-die-150699.html
Ausgedruckt am: 24.04.2025 um 04:04 Uhr
20 Kommentare
Neuester Kommentar

Hallo takitano!
Für den Fall, dass Du keine Batch-Lösung bekommst, könntest Du mal dieses VB-Skript testen.
Quellcode in Datei (*.vbs) kopieren und die Ordnerpfad-Konstante entsprechend anpassen:
Wobei alle *.txt-Dateien überschrieben werden, die den Bezeichner "MD5" enthalten
Gruß Dieter
[edit] geändert [/edit]
Für den Fall, dass Du keine Batch-Lösung bekommst, könntest Du mal dieses VB-Skript testen.
Quellcode in Datei (*.vbs) kopieren und die Ordnerpfad-Konstante entsprechend anpassen:
Const FolderPath = "E:\Test"
Dim Fso, File, ImportFile, ExportFile, Text, StartZeile, HashValue, i
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each File In Fso.GetFolder(FolderPath).Files
If LCase(Fso.GetExtensionName(File)) = "txt" Then
Set ImportFile = Fso.OpenTextFile(File.Path)
Text = Split(ImportFile.ReadAll, vbCrLf): ImportFile.Close
For i = 0 To UBound(Text)
If InStr(1, Text(i), "MD5", vbTextCompare) > 0 Then StartZeile = i + 1: Exit For
Next
If i <= UBound(Text) Then
Set ExportFile = Fso.CreateTextFile(File.Path)
ExportFile.WriteLine "MD5"
For i = StartZeile To UBound(Text)
If Text(i) <> "" Then
HashValue = Split(Text(i), ";")(0)
If IsNumeric("&H" & Left(HashValue, 8)) Then ExportFile.WriteLine HashValue
End If
Next
ExportFile.Close
End If
End If
Next
Gruß Dieter
[edit] geändert [/edit]

Hallo takitano!
Code oben geändert
Für den Fall, das der Bezeichner nicht in Zeile 7 oder an Position 1 steht, wird die Startzeile jetzt automatisch ermittelt, sofern vorhanden. Ansonsten wird die Datei übersprungen.
Gruß Dieter
Code oben geändert
Für den Fall, das der Bezeichner nicht in Zeile 7 oder an Position 1 steht, wird die Startzeile jetzt automatisch ermittelt, sofern vorhanden. Ansonsten wird die Datei übersprungen.
Gruß Dieter
Hallo takitano und willkommen im Forum!
Für den Fall, dass Dich die Batch-Lösung noch interessiert
, ein ungetester Vorschlag:
Grüße
bastla
Für den Fall, dass Dich die Batch-Lösung noch interessiert
@echo off & setlocal
set "Verzeichnis=D:\Das mit den Hashes"
pushd "%Verzeichnis%"
set "HT=%temp%\HashTemp.tmp"
for /f "delims=" %%i in ('findstr /m "MD5" *.txt') do (
move "%%i" "%HT%"
for /f "usebackq skip=6 delims=;" %%a in ("%HT%") do >>"%%i" echo %%a
)
del "%HT%"
popd
bastla
Hallo takitano!
Mit Batch ist Dein Wunsch nicht ganz so einfach zu realisieren - versuch es eher mit der folgenden (ungetesteten) Variante von Dieters VB-Script:
Grüße
basta
Mit Batch ist Dein Wunsch nicht ganz so einfach zu realisieren - versuch es eher mit der folgenden (ungetesteten) Variante von Dieters VB-Script:
Const FolderPath = "E:\Test"
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each File In Fso.GetFolder(FolderPath).Files
If LCase(Fso.GetExtensionName(File)) = "txt" Then
Text = Split(Fso.OpenTextFile(File.Path).ReadAll, vbCrLf)
For i = 0 To UBound(Text)
If InStr(1, Text(i), "MD5", vbTextCompare) > 0 Then StartZeile = i + 1: Exit For
Next
If i <= UBound(Text) Then
TextNew = "MD5"
For i = StartZeile To UBound(Text)
If Text(i) <> "" Then
HashValue = Split(Text(i), ";")(0)
If IsNumeric("&H" & Left(HashValue, 8)) Then TextNew = TextNew & vbCrLf & HashValue
End If
Next
Fso.CreateTextFile(File.Path).Write TextNew
End If
End If
Next
basta
Hallo takitano!
Hat die "Eine" irgend eine Besonderheit? Ist, wenn Du versuchsweise die Dateien in unterschiedlicher Reihenfolge in den Testordner kopierst, immer die gleiche Datei betroffen?
Als Alternative noch eine Variante, bei welcher die ersten 6 Zeilen ohne Rücksicht auf den Inhalt übersprungen werden:
Grüße
bastla
Hat die "Eine" irgend eine Besonderheit? Ist, wenn Du versuchsweise die Dateien in unterschiedlicher Reihenfolge in den Testordner kopierst, immer die gleiche Datei betroffen?
Als Alternative noch eine Variante, bei welcher die ersten 6 Zeilen ohne Rücksicht auf den Inhalt übersprungen werden:
Const FolderPath = "E:\Test"
Set Fso = CreateObject("Scripting.FileSystemObject")
For Each File In Fso.GetFolder(FolderPath).Files
If LCase(Fso.GetExtensionName(File)) = "txt" Then
Text = Split(Fso.OpenTextFile(File.Path).ReadAll, vbCrLf)
TextNew = "MD5"
For i = 6 To UBound(Text) 'Zeilen 0 bis 5 überspringen
If Text(i) <> "" Then
HashValue = Split(Text(i), ";")(0)
If IsNumeric("&H" & Left(HashValue, 8)) Then TextNew = TextNew & vbCrLf & HashValue
End If
Next
Fso.CreateTextFile(File.Path).Write TextNew
End If
Next
bastla
Hallo takitano!
Nixdestrotrotz: Ein Batch, der aus allen Textdateien die abschließende Zeilenschaltung entfernt, könnte (schon wieder ungetestet) etwa so aussehen:
[Edit]
Ich war von einer "normalen" Zeilenschaltung ausgegangen - sollte sich das Problem tatsächlich aus dem "^Z" ergeben, müsste die Zeile5 6 eher
lauten.
[/Edit]
Grüße
bastla
Das betrifft nur diese einzelne Datei.
Es würde mich stören, wenn ich an sich gleich stukturierte Dateien erwarte, aber die eine (und vielleicht auch andere) aus der Reihe tanzt - insofern solltest Du vielleicht an der Quelle ansetzen ...Nixdestrotrotz: Ein Batch, der aus allen Textdateien die abschließende Zeilenschaltung entfernt, könnte (schon wieder ungetestet) etwa so aussehen:
@echo off & setlocal
set "Verzeichnis=E:\Test"
set "R=%temp%\RemoveCrLf.vbs"
>%R% echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll
>>%R% echo If Right(T,2)=vbCrLf Then fso.CreateTextFile(F).Write Left(T,Len(T)-2)
pushd "%Verzeichnis%"
for /f "delims=" %%i in ('dir /b /a-d *.txt') do cscript //nologo %R% "%%i"
popd
Ich war von einer "normalen" Zeilenschaltung ausgegangen - sollte sich das Problem tatsächlich aus dem "^Z" ergeben, müsste die Zeile
>>%R% echo If Right(T,1)=Chr(26) Then fso.CreateTextFile(F).Write Left(T,Len(T)-1)
[/Edit]
Grüße
bastla