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, 5832 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
Server-Hardware
HP iLO ist gefährdet (iLO 4))
Tipp von AlFalcone vor 6 StundenServer-Hardware

Gemäss Twitter und Heise gibt es eine Angriffsmöglichkeit auf iLO Quelle: iLO ist gefährdet

CMS
Erneut kritische Zero-Day-Lücke in Drupal
Tipp von Reini82 vor 15 StundenCMS

Laut einem Bericht auf t3n gibt es eine Schwere Sicherheitslücke in Drupal die auch schon ausgenutzt wird. Betroffen sind ...

Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 1 TagSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 1 TagWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

Heiß diskutierte Inhalte
Windows Server
Alten DC entfernen
gelöst Frage von smartinoWindows Server27 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...

Ausbildung
Wie gelingt ein guter Einstieg in die FiSi-Ausbildung? (Umschulung)
Frage von SiAnKoAusbildung27 Kommentare

Schönen guten Tag, ich bin SiAnKo und habe seit dem 1.04.2018 eine Umschulung als FiSi angefangen. Ich möchte natürlich ...

Batch & Shell
Mit Powershell den Inhalt einer Excel mit einer Text Datei abgleichen
gelöst Frage von Bommi1961Batch & Shell21 Kommentare

Hallo zusammen, ich muss den Inhalt einer Excel Datei (Mappe1) mit dem Daten einer Text Datei abgleichen. Die Daten ...

Router & Routing
Subnetzmaske vergrößern
gelöst Frage von groovesurferRouter & Routing18 Kommentare

Hallo, hat jemand schonmal getestet was passiert, wenn man die Subnetzmaske bei laufendem Betrieb (wenn user im Netzwerk verbunden ...