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

Frage Entwicklung Batch & Shell

Mitglied: NachtGefluester

NachtGefluester (Level 1) - Jetzt verbinden

14.03.2007, aktualisiert 09:33 Uhr, 6331 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
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 8 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 12 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...