Top-Themen

Aktuelle Themen (A bis Z)

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 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?

Mitglied: takitano

takitano (Level 1) - Jetzt verbinden

09.09.2010, aktualisiert 14:45 Uhr, 5801 Aufrufe, 20 Kommentare

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
  1. initials=Hash-Werte
  2. date_loaded=09.09.2010
  3. vendor=FLV
  4. package=Player
  5. version=2
MD5;SHA1;SHA256;FILESIZE;FILENAME
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
Mitglied: 76109
09.09.2010 um 14:02 Uhr
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:
01.
Const FolderPath = "E:\Test" 
02.
 
03.
Dim Fso, File, ImportFile, ExportFile, Text, StartZeile, HashValue, i 
04.
     
05.
Set Fso = CreateObject("Scripting.FileSystemObject") 
06.
     
07.
For Each File In Fso.GetFolder(FolderPath).Files 
08.
    If LCase(Fso.GetExtensionName(File)) = "txt" Then 
09.
        Set ImportFile = Fso.OpenTextFile(File.Path) 
10.
             
11.
        Text = Split(ImportFile.ReadAll, vbCrLf):  ImportFile.Close 
12.
             
13.
        For i = 0 To UBound(Text) 
14.
            If InStr(1, Text(i), "MD5", vbTextCompare) > 0 Then StartZeile = i + 1: Exit For 
15.
        Next 
16.
             
17.
        If i <= UBound(Text) Then 
18.
            Set ExportFile = Fso.CreateTextFile(File.Path) 
19.
                 
20.
            ExportFile.WriteLine "MD5" 
21.
                 
22.
            For i = StartZeile To UBound(Text) 
23.
                If Text(i) <> "" Then 
24.
                    HashValue = Split(Text(i), ";")(0) 
25.
                    If IsNumeric("&H" & Left(HashValue, 8)) Then ExportFile.WriteLine HashValue 
26.
                End If 
27.
            Next 
28.
             
29.
            ExportFile.Close 
30.
        End If 
31.
    End If 
32.
Next
Wobei alle *.txt-Dateien überschrieben werden, die den Bezeichner "MD5" enthalten

Gruß Dieter

[edit] geändert [/edit]
Bitte warten ..
Mitglied: takitano
09.09.2010 um 14:17 Uhr
Danke Dieter! Ich teste dein Script aus!

PS: dieser Hash-Wert wurde von mir aus 2 Datei genommen. Nicht relevant!
Bitte warten ..
Mitglied: takitano
09.09.2010 um 14:27 Uhr
Es hat FAST geklappt...
Wie kann man aber in der 7 Zeile vorhandene MD5-Überschrift lassen?
Bitte warten ..
Mitglied: 76109
09.09.2010 um 15:10 Uhr
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
Bitte warten ..
Mitglied: bastla
09.09.2010 um 16:54 Uhr
Hallo takitano und willkommen im Forum!

Für den Fall, dass Dich die Batch-Lösung noch interessiert , ein ungetester Vorschlag:
01.
@echo off & setlocal 
02.
set "Verzeichnis=D:\Das mit den Hashes" 
03.
 
04.
pushd "%Verzeichnis%" 
05.
set "HT=%temp%\HashTemp.tmp" 
06.
for /f "delims=" %%i in ('findstr /m "MD5" *.txt') do ( 
07.
    move "%%i" "%HT%"  
08.
    for /f "usebackq skip=6 delims=;" %%a in ("%HT%") do >>"%%i" echo %%a 
09.
10.
del "%HT%" 
11.
popd
Grüße
bastla
Bitte warten ..
Mitglied: takitano
10.09.2010 um 13:47 Uhr
Herzlichen Dank an Dieter und bastla! Alles läuft prima.
Bitte warten ..
Mitglied: takitano
03.08.2011 um 10:26 Uhr
Zitat von bastla:
Hallo takitano und willkommen im Forum!

Für den Fall, dass Dich die Batch-Lösung noch interessiert , ein ungetester Vorschlag:
01.
@echo off & setlocal 
02.
> set "Verzeichnis=D:\Das mit den Hashes" 
03.
>  
04.
> pushd "%Verzeichnis%" 
05.
> set "HT=%temp%\HashTemp.tmp" 
06.
> for /f "delims=" %%i in ('findstr /m "MD5" *.txt') do ( 
07.
>     move "%%i" "%HT%"  
08.
>     for /f "usebackq skip=6 delims=;" %%a in ("%HT%") do >>"%%i" echo %%a 
09.
> ) 
10.
> del "%HT%" 
11.
> popd 
12.
> 
Grüße
bastla

Hallo Bastla,
deine Lösung hat sehr lange funktioniert und ich habe kein Problem damit gehabt. Nur habe ich mein Programm upgraded und siehe da: sie mag keinen "Waagerücklauf"-Zeichen mehr, welchen diese Batch-Datei in der letzten leeren Zeile produziert. Kann man das irgendwie beseitigen?
Bitte warten ..
Mitglied: bastla
03.08.2011 um 11:11 Uhr
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:
01.
Const FolderPath = "E:\Test" 
02.
Set Fso = CreateObject("Scripting.FileSystemObject") 
03.
For Each File In Fso.GetFolder(FolderPath).Files 
04.
    If LCase(Fso.GetExtensionName(File)) = "txt" Then 
05.
        Text = Split(Fso.OpenTextFile(File.Path).ReadAll, vbCrLf) 
06.
        For i = 0 To UBound(Text) 
07.
            If InStr(1, Text(i), "MD5", vbTextCompare) > 0 Then StartZeile = i + 1: Exit For 
08.
        Next 
09.
        If i <= UBound(Text) Then 
10.
            TextNew = "MD5" 
11.
            For i = StartZeile To UBound(Text) 
12.
                If Text(i) <> "" Then 
13.
                    HashValue = Split(Text(i), ";")(0) 
14.
                    If IsNumeric("&H" & Left(HashValue, 8)) Then TextNew = TextNew & vbCrLf & HashValue 
15.
                End If 
16.
            Next 
17.
            Fso.CreateTextFile(File.Path).Write TextNew 
18.
        End If 
19.
    End If 
20.
Next
Grüße
basta
Bitte warten ..
Mitglied: takitano
03.08.2011 um 11:25 Uhr
Leider er läuft nicht 100% - von 5 Dateien wird eine immer falsch berechnet und fast vollständig gelöscht. Es bleiben nur die ersten 2 Zeilen. Dafür gibt's tatsächlich keinen Waagerücklauf mehr.
Bitte warten ..
Mitglied: bastla
03.08.2011 um 11:32 Uhr
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:
01.
Const FolderPath = "E:\Test" 
02.
Set Fso = CreateObject("Scripting.FileSystemObject") 
03.
For Each File In Fso.GetFolder(FolderPath).Files 
04.
    If LCase(Fso.GetExtensionName(File)) = "txt" Then 
05.
        Text = Split(Fso.OpenTextFile(File.Path).ReadAll, vbCrLf) 
06.
        TextNew = "MD5" 
07.
        For i = 6 To UBound(Text) 'Zeilen 0 bis 5 überspringen 
08.
            If Text(i) <> "" Then 
09.
                HashValue = Split(Text(i), ";")(0) 
10.
                If IsNumeric("&H" & Left(HashValue, 8)) Then TextNew = TextNew & vbCrLf & HashValue 
11.
            End If 
12.
        Next 
13.
        Fso.CreateTextFile(File.Path).Write TextNew 
14.
    End If 
15.
Next
Grüße
bastla
Bitte warten ..
Mitglied: takitano
03.08.2011 um 11:51 Uhr
Das gleiche Ergebnis. Ich habe mich falsch ausgedruckt: die ersten 6 Zeilen werden korrekt gelöscht, aber dann bleiben nur die 7 und die 8 Zeilen und alle anderen ab 9 Zeile werden gelöscht. Das betrifft nur diese einzelne Datei. Da ich aber ganze Menge von Dateien habe (bis 100-150 meistens) kann ich nicht jede von diesen Dateien manuell überprüfen. Dein Batch bearbeitet aber ALLE Dateien korrekt. Nur das Problem mit diesem Waagenrücklauf... Kann sein das da eine neue Batch-datei eingesetzt werden muss (nur um diesen Waagenrücklauf in allen 100-150 Dateien innerhalb eines Ordners zu überprüfen und diese Zeile (mit Waagenrücklauf - also ^Z-Zeichen) komplett entfernen???

PS: Ich weiß es nicht ob es tatsächlich eine Waagerücklaufzeichen ist. Im Textedit sieht es so aus:

tegdhdfhfhjfhjfjh
dfghfhjnfgnjgnh
fghfjnmgfnjgnm
<-

Im Creameditor::

tegdhdfhfhjfhjfjh
dfghfhjnfgnjgnh
fghfjnmgfnjgnm
^Z
Bitte warten ..
Mitglied: bastla
03.08.2011 um 12:05 Uhr
Hallo takitano!
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:
01.
@echo off & setlocal 
02.
set "Verzeichnis=E:\Test" 
03.
 
04.
set "R=%temp%\RemoveCrLf.vbs" 
05.
>%R%  echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll 
06.
>>%R% echo If Right(T,2)=vbCrLf Then fso.CreateTextFile(F).Write Left(T,Len(T)-2) 
07.
 
08.
pushd "%Verzeichnis%" 
09.
for /f "delims=" %%i in ('dir /b /a-d *.txt') do cscript //nologo %R% "%%i" 
10.
popd
[Edit]
Ich war von einer "normalen" Zeilenschaltung ausgegangen - sollte sich das Problem tatsächlich aus dem "^Z" ergeben, müsste die Zeile 5 6 eher
>>%R% echo If Right(T,1)=Chr(26) Then fso.CreateTextFile(F).Write Left(T,Len(T)-1)
lauten.
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: takitano
03.08.2011 um 12:07 Uhr
Die Quelle hat unser Boss geschrieben - sie zu editieren ist, leider, TABU!
Bitte warten ..
Mitglied: bastla
03.08.2011 um 12:09 Uhr
Hallo takitano!
Die Quelle hat unser Boss geschrieben
Sei Dir meines Mitgefühls gewiss ...

Grüße
bastla

P.S.: Ich habe oben noch eine Alternative angefügt ...
Bitte warten ..
Mitglied: takitano
03.08.2011 um 12:12 Uhr
Ich probiere es gleich
Bitte warten ..
Mitglied: takitano
03.08.2011 um 12:15 Uhr
Es bleibt:

sgdfghddhgdfg
dfgbdbgfbgfb
fgbfbfbfgbfbgfb
fbgfbngfbngng
->

Im Grunde brauche ich nur diese Umbruchszeile mit diesem Zechen löschen. Dann ist das Programm zufrieden. Aber manuell 100 Dateien öffnen und editieren....
Bitte warten ..
Mitglied: bastla
03.08.2011 um 12:17 Uhr
Hallo takitano!

Schau doch mal per Hex-Editor nach, welches Zeichen genau (ASCII-/ANSI-Wert) denn nun das Problem darstellt ...

Grüße
bastla
Bitte warten ..
Mitglied: takitano
03.08.2011 um 12:30 Uhr
0D 0A 1A 0D 0A- steht dort. Also hadelt es sich um SUB. Es soll bleiben nur 0D 0A dann funktioniert. SUB (^Z) muss weg. Codierung ist Latin1.
Bitte warten ..
Mitglied: takitano
03.08.2011 um 12:50 Uhr
DANKE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Es hat geklappt - ich bin ein ID.... Habe zeilen 5 und 6 in deiner Batch-Datei verwechselt!!! Reif für den Insel.
Bitte warten ..
Mitglied: bastla
03.08.2011 um 13:26 Uhr
Hallo takitano!

"Die Insel" wird auch überbewertet - ich war erst neulich dort und habe trotzdem selbst für die Verwechslung gesorgt ("Zeile 5" geschrieben und "Zeile 6" gemeint) ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Per Batch erste 15 Zeichen in jeder Zeile einer Textdatei lassen. Den Rest - löschen. Wie?

gelöst Frage von takitanoBatch & Shell9 Kommentare

Hallo an alle, ich habe folgendes Problem: in einer Texdatei habe ich ca. 60.000.000 Zeilen (453 MB) Jede Zeile ...

Ubuntu

Wie kann man 2 Textdateien vergleichen (OHNE SORTIERUNG!) und die gleiche Zeilen in einer Datei lassen und den Rest löschen?

gelöst Frage von takitanoUbuntu11 Kommentare

Ich habe 2 Textdateien mit deutschen Wörtern. Erste Datei ist nach Häufigket von Wörtern sortiert (frequency list) und zweite ...

Batch & Shell

Batch um erste Zeile einer CSV zu löschen

gelöst Frage von chris1987.1Batch & Shell6 Kommentare

Hallo, im Rahmen meiner Masterarbeit muss ich eine Vielzahl von csv Dateien untersuchen. Hierbei muss ich einige dieser Dateien ...

VB for Applications

Textdateien Importieren in Excel - erste Zeile weg lassen!

gelöst Frage von micha020983VB for Applications4 Kommentare

Hallo zusammen, ich hab immer wiederkehrend mehrere Semikolongetrennte Textdateien, welche ich untereinander in Excel brauche! Klappt hiermit schon ganz ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 2 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 6 StundenCPU, RAM, Mainboards4 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 20 StundenRouter & Routing3 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör15 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...