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, 6355 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
Ubuntu

Vor- und Nachnamen mit einem bestimmten Muster aus einer Textdatei löschen

gelöst Frage von takitanoUbuntu15 Kommentare

Ok. Meine letzte Frage war ein bisschen undeutlich formuliert. Also hier ist ein neuer Versuch. Ich habe drei Text-Dateien: ...

Batch & Shell

Mittels Batch jede Zeile einer Textdatei prüfen

gelöst Frage von Peter32Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei (Projekte.txt), die etwa so aufgebaut ist Nun möchte ich gerne, dass ein Batch-Script jede ...

Batch & Shell

Bestimmte Zeile einer Textdatei mit Batch auslesen

gelöst Frage von PinkFLuffyUnicornBatch & Shell2 Kommentare

Hi, ich habe ein kleines Batch Script, welches mir den Status der Firewall ausgeben soll(ob an oder aus) der ...

Batch & Shell

Text in neue 1. Zeile in Textdatei einfügen

Frage von FuxxLiBatch & Shell4 Kommentare

Hallo, Folgender Sachverhalt. Die Warenwirtschaft wirft ein Exportfile mit einer Kopfzeile und danach den Datensätzen aus. Für die Weiterverarbeitung ...

Neue Wissensbeiträge
Peripheriegeräte
Unterschrank für HP Drucker
Tipp von NixVerstehen vor 1 TagPeripheriegeräte2 Kommentare

Als kurzen Freitags-Tipp möchte ich gerne meinen neuen Drucker-Unterschrank Modell Amica KS 15423W vorstellen. Das Gerät eignet sich hervorragend ...

Windows 10
Windows 10 - Probleme mit Point-And-Print
Tipp von emeriks vor 2 TagenWindows 103 Kommentare

Hi, wir kämpfen z.Z. mit einigen Druckertreibern, welche unter Win10 beim Verbinden eines Druckers von Printserver mit dem Dialog ...

Windows 10

Windows 10 1803 - Ihr Roamingbenutzerprofil wurde nicht vollständig synchronisiert

Anleitung von Deepsys vor 2 TagenWindows 101 Kommentar

Bei allen Windows 10 1803 PCs traten Probleme mit den Servergespeicherten Profilen auf. Das Abmelden dauerte sehr lange und ...

Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 4 TagenExchange Server7 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Heiß diskutierte Inhalte
Humor (lol)
Freitagsfrage: Was tun, wenn der Admin der DAU ist?
gelöst Frage von VoiperHumor (lol)32 Kommentare

Moin Zusammen, Eine nicht ganz ernst gemeinte Frage an die Außendienstler unter uns. Zusammenfassung: Ein Inhouse Admin ruft bei ...

Windows Netzwerk
LTE Modul - Kein Internet trotz Verbindung
Frage von killtecWindows Netzwerk19 Kommentare

Hallo, ich habe hier ein Dell 7390 2-in-1 mit W10 Pro wo ich nachträglich eine LTE-Karte (Original Dell DW5811e ...

LAN, WAN, Wireless
HP Probook 470 G4 - abbrechende Downloads
Frage von joern1LAN, WAN, Wireless19 Kommentare

Folgendes Problem, für einen Tipp wäre ich dankbar: Bei WLAN-Verbindung zum Internet (nicht LAN) kommt es bei etwas größeren ...

Router & Routing
Routing Problem mit Kaskade FritzBox und pfsense zugeriff nur von der firewall auf die clients und 0.0.0.0
Frage von ukl1967Router & Routing18 Kommentare

Hallo, ich habe ein an sich triviales Problem elches ich allerdings nicht gelöst bekomme. NAS 10.5.10.53 Mein Netz baut ...