Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 6292 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Per Batch Textdatei Spaltenweise auslesen nochmal weil ich dumm bin (9)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen (7)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...