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

Per Batch in Textdatei (1.000.000 Zeilen) Muster finden und löschen und etwas einfügen

Mitglied: NachtGefluester

NachtGefluester (Level 1) - Jetzt verbinden

14.03.2007, aktualisiert 09:33 Uhr, 6380 Aufrufe, 2 Kommentare

Hallo.

Habe ein Doubletten-Suchprogramm auf meine Festplatten losgelassen. Solch ein Programm findet raus, ob eine Datei zweimal / dreimal / x-mal vorhanden ist.

Rausgekommen ist eine Textdatei mit etwas mehr als 1.000.000 Zeilen (Leerzeilen miteingerechnet). Aus dieser Textdatei müssten mehrere Textmuster erkannt und entfernt bzw. ersetzt werden.

Die Suchfunktion habe ich bereits eine halbe Stunde lang ergebnislos benutzt. Finde nichts, was sich aus bereits vorhandenen Lösungen zusammenbasteln lässt, um mein Problem zu lösen.


Aufbau der Textdatei (exemplarisch), Leerzeichen sind mit # dargestellt:

123456789##C:\Order0\Datei1.xyzDD.MM.YYYY##HH:MM
123456789##D:\Order1\Datei1.xyzDD.MM.YYYY##HH:MM
(Leerzeile)
##3456789##E:\Order2\Datei2.xyzDD.MM.YYYY##HH:MM
##3456789##F:\Order3\Datei2.xyzDD.MM.YYYY##HH:MM
##3456789##D:\Order4\Datei2.xyzDD.MM.YYYY##HH:MM
##3456789##C:\Order5\Datei2.xyzDD.MM.YYYY##HH:MM
(Leerzeile)
9##I:\Order#X\Datei#Z.xyzDD.MM.YYYY##HH:MM
9##J:\Order#Y\Datei#Z.xyzDD.MM.YYYY##HH:MM
9##B:\Order#A\Datei#Z.xyzDD.MM.YYYY##HH:MM
(Leerzeile)


Der Aufbau nochmal in Textform:

[1] Am Anfang also eine bis zu neunstellige Zahl. Wird diese kleiner, werden die entsehenden Lücken vor der Zahl, mit bis zu acht Leerzeichen aufgefüllt. Diese Zahl ist nicht fortlaufend (also nicht 1, 2, 3, 4, ...), sondern es sind auch Sprünge vorhanden

[2] Danach folgen immer zwei Leerzeichen

[3] Dann die Pfadangabe. Diese kann Leerzeichen enthalten

[4] Nach der Pfadangabe kommen unterschiedlich viele Leerzeichen

[5] Das Datum in der Form DD.MM.YYYY folgt diesen unterschiedlich vielen Leerzeichen

[6] Danach folgen immer zwei Leerzeichen

[7] Und am Ende die Uhrzeit in der Form HH:MM


Was gelöscht werden soll: [1] + [2], [4] bis [7]


Danach sollte sie also so aussehen, Leerzeichen sind mit # dargestellt:

C:\Order0\Datei1.xyz
D:\Order1\Datei1.xyz
(Leerzeile)
E:\Order2\Datei2.xyz
F:\Order3\Datei2.xyz
D:\Order4\Datei2.xyz
C:\Order5\Datei2.xyz
(Leerzeile)
I:\Order#X\Datei#Z.xyz
J:\Order#Y\Datei#Z.xyz
B:\Order#A\Datei#Z.xyz
(Leerzeile)


Nun soll etwas eingefügt werden.

Hier schreibe ich erstmal das Ergebnis hin, Leerzeichen sind mit # dargestellt:

REM#"C:\Order0\Datei1.xyz"
DEL#/F#"D:\Order1\Datei1.xyz"
(Leerzeile)
REM#"E:\Order2\Datei2.xyz"
DEL#/F#"F:\Order3\Datei2.xyz"
DEL#/F#"D:\Order4\Datei2.xyz"
DEL#/F#"C:\Order5\Datei2.xyz"
(Leerzeile)
REM#"I:\Order#X\Datei#Z.xyz"
DEL#/F#"J:\Order#Y\Datei#Z.xyz"
DEL#/F#"B:\Order#A\Datei#Z.xyz"
(Leerzeile)


Die erste Zeile eines Blocks, wo aufgelistet wird, inwiefern die Datei zweimal / dreimal / x-mal vorhanden ist, soll also durch ein REM ausgeklammert werden und die restlichen Zeilen erhalten bis zur Leerzeile ein DEL /F

Der Pfadname soll in Anführungszeichen gesetzt werden.


Ich hoffe doch dass diese Aufgabe irgendwie lösbar ist. Von mir aus auch in mehreren Schritten. Und vielen Dank für die Mühe, es bis hierher durchgelesen zu haben und dann auch schonmal Danke dafür, sollte sich jemand an eine Lösung wagen.

Gruß,
NachtGefluester





[Edit Biber 16.9.2007]
Nachtgefluester hat im letzten halben Jahr keine Rückmeldung gegeben
Und sich auch nicht mehr angemeldet: Mitglied seit: 14.03.2007, letzter Login: 21.03.2007
Nur aus Respekt vor bastlas Mühen und Lösung habe ich diesen Beitrag nicht in den Papierkorb verschoben.
Beitrag geschlossen.
Auf "gelöst" setze ich ihn nicht ohne Rückmeldung des Threadowners.
[/Edit]
Mitglied: bastla
14.03.2007 um 08:07 Uhr
Hallo NachtGefluester und willkommen im Forum!

Vielleicht solltest Du zunächst einmal die Optionen des von Dir verwendeten Programmes näher ansehen - vielleicht kann es bereits selbst die gewünschten Batchdatei erstellen.

Wenn das nicht geht, gäbe es als eine Alternative zB CloneSpy. Damit lassen sich sehr gezielt die Löschvorgänge steuern (eben auch über Batch). Einziges Manko (der von mir zuletzt verwendeten Version) der Batchverarbeitung mit CloneSpy ist der Umgang mit Sonderzeichen (also auch Umlauten). Das lässt sich aber per (zweitem) Batch beheben, etwa
01.
chcp 1252
02.
type CloneSpyResult.bat > Loeschen.bat
Grüße
bastla
Bitte warten ..
Mitglied: bastla
14.03.2007 um 09:33 Uhr
Hallo NachtGefluester!

Bei näherem Hinsehen könntest Du (entsprechend dem Format Deiner Liste) ohnehin bereits CloneSpy verwendet haben, aber wie auch immer:

Erstellung der Batchdatei aus CloneSpy heraus:
Du brauchst dazu nur "Action / Automatically delete (without confirmation)" und "On automatic deletion / Defer deletion to batch file" zu wählen. In den Options kannst Du noch im Register "Export" (bei "Batch file properties") festlegen, ob die Batch-Datei jedes Mal neu erstellt werden, immer in die gleiche Datei geschrieben oder an eine schon vorhandene Datei angehängt werde soll und auch den Löschbefehl bearbeiten (entspricht aber ohnehin schon Deiner Vorgabe).

Der Unterschied zur von Dir angestrebten Lösung ist nur, dass in der erzeugten Batch-Datei nur die zu löschenden Dateien aufscheinen - Du kannst aber im Register "Logging" auch "Logging Properties / Enable / Log retained files" auswählen, um eine entsprechende Liste zu erhalten.
Da Du nun aber schon Deine Liste hast, ein kleines VB-Script (speichern unter zB "C:\Scripts\MakeDelBatch.vbs"), um die von Dir gewünschte Batch-Datei zu erstellen:
01.
'MakeDelBatch.vbs
02.
Const LenAnfang = 11
03.
Const LenEnde = 18
04.
QuellDatei = ""
05.
If WScript.Arguments.Count < 1 Then
06.
	QuellDatei = InputBox("Bitte die Quelldatei (mit vollem Pfad) angeben!")
07.
Else
08.
	QuellDatei = WScript.Arguments(0)
09.
End If
10.
 
11.
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
12.
If Not fso.FileExists(QuellDatei) Then
13.
	WScript.Echo "Datei " & QuellDatei & " nicht gefunden."
14.
    WScript.Quit(1)
15.
End If
16.
 
17.
Set Quelle = fso.OpenTextFile(QuellDatei, 1)
18.
 
19.
If InstrRev(QuellDatei, "\") Then
20.
	ZielDatei = Left(QuellDatei, InstrRev(QuellDatei, "\")) & _
21.
		"Loesche-" & Mid(QuellDatei, InstrRev(QuellDatei, "\") + 1)
22.
Else
23.
	ZielDatei = "Loesche-" & QuellDatei
24.
End If
25.
Set Ziel = fso.OpenTextFile(ZielDatei, 2, True)
26.
 
27.
Keep = True
28.
Do While Not Quelle.AtEndOfStream
29.
    Zeile = Quelle.ReadLine
30.
	If Trim(Zeile) <> "" Then 'keine Leerzeile
31.
		P = Trim(Mid(Zeile, LenAnfang, Len(Zeile) - LenAnfang - LenEnde ))
32.
		If Keep Then
33.
			Ziel.WriteLine "REM " & Chr(34) & P & Chr(34)
34.
		Else
35.
			Ziel.WriteLine "DEL /F " & Chr(34) & P & Chr(34)			
36.
		End If
37.
		Keep = False
38.
	Else 'Leerzeile
39.
		Ziel.WriteLine
40.
		Keep = True 'nächste Datei behalten
41.
	End If
42.
Loop
43.
Quelle.Close
44.
Ziel.Close
45.
WScript.Echo "Fertig."
Das Script kannst Du so verwenden, dass Du Deine Textdatei auf die Script-Datei ziehst oder es von der Commandline mit
01.
C:\Scripts\MakeDelBatch.vbs "D:\Meine Duplikate.txt"
startest. Erzeugt würde in diesem Fall die Datei "D:\Loesche-Meine Duplikate.txt".

Das oben angemerkte Umlaut-Problem wirst Du vermutlich aber auch bei dieser Variante erst noch lösen müssen.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Nonsense Error - find ihn nicht. (Batch)
gelöst Frage von clragonBatch & Shell7 Kommentare

Hey Leute! Ich bin's wieder. Heute habe ich ein besonders unnötiges Problem,. Aus irgendeinem Grund hat dieses Script einen ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen
Frage von PinkFLuffyUnicornBatch & Shell7 Kommentare

hi, ist es irgendwie möglich anstatt eine Textdatei via Batch Spaltenweise auszulesen und nicht zeilenweise wie das normal ganz ...

Batch & Shell
Textdatei verschlüsseln per Batch
gelöst Frage von Nick2212Batch & Shell22 Kommentare

Hi Leute ich wollte einmal fragen ob es eine Möglichkeit gibt, den Inhalt einer Textdatei per Batch zu verschlüsseln ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst Frage von CreatorXBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 2 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 3 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 5 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 5 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
gelöst Frage von Leo-leHosting & Housing24 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

LAN, WAN, Wireless
WLAN und Ausmessung - Eine Glaubensfrage?
Frage von ptr2brainLAN, WAN, Wireless23 Kommentare

Liebe Experten, als Sys-Admin habe ich mir schon öfter die Frage gestellt, ob es sich beim Thema WLAN und ...

Drucker und Scanner
SW-Laserdrucker mit sechs Papierfächern gesucht
Frage von MOS6581Drucker und Scanner19 Kommentare

Moin, zur Abwechslung mal eine sonderbare Anforderung :) Ich suche einen S/W Laserdrucker (kein MFP), der sechs Papierfächer bzw. ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung19 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...