Batch: In Text Datei zwei Punkte finden und den Text dazwischen löschen
Hallo Zusammen,
ich möchte mehrere txt Dateien durchsuchen und die Zeilen mit dem Text "PROCEDURE print" und "END OF PROCEDURE print" sowie die Zeilen dazwischen löschen.
Beispiel:
' * PROCEDURE print *
Call CUSTOBJOPEN("PRINT")
CUSTDLGTITLE=PRINT_
' * END OF PROCEDURE print **
Dieser komplette Block sollte gelöscht werden.
Momentan verwende ich folgenden Batch aus dem Forum:
:: StripDefinitions.cmd ::::::::::::::::::::::::::::::::::::::::::::
@echo off&SetLocal
Set Basis=C:\Users\fritz\Desktop\fritz
Set Defi=C:\Users\fritz\Desktop\fritz\Suche\Suchen.txt
Set Dateien=*.vbs
Pushd %Basis%
For /F "Delims=" %%A in ('Dir /B /S /A-D "%Dateien%" '
) Do findstr /L /G:%Defi% "%%A">NUL 2>&1 &&Call :Process "%%~fA"
Popd
Goto :eof
:Process -----------------------------------------------------------
Echo Bearbeite: %~1
If Exist "%~dpn1.Bak" Del /Q "%~dpn1.Bak" >NUL 2>&1
Ren %1 "%~n1.Bak"
findstr /I /V /G:%Defi% "%~dpn1.Bak" >%1
:: start "" /Wait Winmerge %1 "%~dpn1.Bak" & Pause
:: StripDefinitions.cmd ::::::::::::::::::::::::::::::::::::::::::::
Damit kann ich nur einzelne Wörter suchen und die Zeile löschen.
Hat jemand einen guten Lösungvorschlag?
Vielen Dank für eure Hilfe.
Gruß
novice
ich möchte mehrere txt Dateien durchsuchen und die Zeilen mit dem Text "PROCEDURE print" und "END OF PROCEDURE print" sowie die Zeilen dazwischen löschen.
Beispiel:
' * PROCEDURE print *
Call CUSTOBJOPEN("PRINT")
CUSTDLGTITLE=PRINT_
' * END OF PROCEDURE print **
Dieser komplette Block sollte gelöscht werden.
Momentan verwende ich folgenden Batch aus dem Forum:
:: StripDefinitions.cmd ::::::::::::::::::::::::::::::::::::::::::::
@echo off&SetLocal
Set Basis=C:\Users\fritz\Desktop\fritz
Set Defi=C:\Users\fritz\Desktop\fritz\Suche\Suchen.txt
Set Dateien=*.vbs
Pushd %Basis%
For /F "Delims=" %%A in ('Dir /B /S /A-D "%Dateien%" '
) Do findstr /L /G:%Defi% "%%A">NUL 2>&1 &&Call :Process "%%~fA"
Popd
Goto :eof
:Process -----------------------------------------------------------
Echo Bearbeite: %~1
If Exist "%~dpn1.Bak" Del /Q "%~dpn1.Bak" >NUL 2>&1
Ren %1 "%~n1.Bak"
findstr /I /V /G:%Defi% "%~dpn1.Bak" >%1
:: start "" /Wait Winmerge %1 "%~dpn1.Bak" & Pause
:: StripDefinitions.cmd ::::::::::::::::::::::::::::::::::::::::::::
Damit kann ich nur einzelne Wörter suchen und die Zeile löschen.
Hat jemand einen guten Lösungvorschlag?
Vielen Dank für eure Hilfe.
Gruß
novice
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 290578
Url: https://administrator.de/contentid/290578
Ausgedruckt am: 26.11.2024 um 19:11 Uhr
13 Kommentare
Neuester Kommentar
Moin,
z.b. fix mit diesem Powershell-Schnippsel
oder diesem VBS
usw. und sofort.
Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Gruß grexit
z.b. fix mit diesem Powershell-Schnippsel
[regex]::replace((gc 'C:\datei.txt' | out-string),'(?sim)[^\r\n]*?PROCEDURE print.*?END OF PROCEDURE print[^\r\n]*','') | set-content 'C:\datei-fertig.txt'
Const DATEIIN = "C:\datei.txt"
Const DATEIOUT = "C:\datei-fertig.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
regex.Global = True: regex.IgnoreCase = True: regex.MultiLine = True
regex.Pattern = "^.*PROCEDURE print[\s\S]*END OF PROCEDURE print.*"
fso.OpenTextFile(DATEIOUT,2,True).Write(regex.Replace(fso.OpenTextFile(DATEIIN,1).ReadAll(),""))
Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Gruß grexit
Zitat von @AnkhMorpork:
Was jetzt, der Prozess des Suchens oder das es schon so viele Einträge dazu gibt ?Zitat von @122990:
Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Genau das ist ja das Problem ... Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Zitat von @TlBERlUS:
Zitat von @AnkhMorpork:
Was jetzt, der Prozess des Suchens oder das es schon so viele Einträge dazu gibt ?Zitat von @122990:
Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Genau das ist ja das Problem ... Einmal die Forensuche bemüht und nach Suchen und Ersetzen gesucht und 1000 Threads gefunden ....
Wenn du schon mal 1000 Einträge durchgewürgt hättest, erübrigt sich die Frage ...
Genau deswegen beten wir hier immer und immer wieder BITTE POSTET EUREN CODE IN CODETAGS !!
Läuft hier einwandfrei ...ansonsten sind wegen dem hier genannten Umstand das ohne Codetags gepostet wurde vermutlich Sonderzeichen abhanden gekommen ...oder deine Datei ist in Unicode dann muss man es geringfügig anpassen.
Bitte nutze also Code-Tags für deinen Quellcode:
Läuft hier einwandfrei ...ansonsten sind wegen dem hier genannten Umstand das ohne Codetags gepostet wurde vermutlich Sonderzeichen abhanden gekommen ...oder deine Datei ist in Unicode dann muss man es geringfügig anpassen.
Bitte nutze also Code-Tags für deinen Quellcode:
<code> Quellcode </code>
.
Nein nicht diesen Code, den Inhalt deiner Textdatei ... bitte überprüfe ebenfalls wie schon gesagt ob dieser UTF8 oder Unicode ist.
Hier mein Test:
Inhalt der Testdatei:
Nach dem Ausführen des Skripts sieht das Ergebnis so aus
Also muss es an deiner hier geposteten Formatierung liegen oder dein File ist Unicode/UTF8 wenn das der Fall ist musst du die letzte Zeile so anpassen:
Wenn das auch nicht klappt mach aus der -1 in dieser Zeile mal eine -2.
Die Formatierung ist hier wichtig da hier mit Regular Expression gearbeitet wird, und ohne Exakte Ausgangsbasis deiner Daten kann man dir nicht vernünftig helfen.
Inhalt der Testdatei:
Zeile1
Zeile2
' * PROCEDURE print *
Call CUSTOBJOPEN("PRINT")
CUSTDLGTITLE=PRINT_
' * END OF PROCEDURE print **
Hier gehts weiter
BlaBla
BlaBla2
Zeile1
Zeile2
Hier gehts weiter
BlaBla
BlaBla2
fso.OpenTextFile(DATEIOUT,2,True).Write(regex.Replace(fso.OpenTextFile(DATEIIN,1,False,-1).ReadAll(),""))
Die Formatierung ist hier wichtig da hier mit Regular Expression gearbeitet wird, und ohne Exakte Ausgangsbasis deiner Daten kann man dir nicht vernünftig helfen.
Zitat von @novice15:
Und wie bekommt man das hin, dass alle Datein im Ordner durchsucht und geändert werden. Also eine schleife... (Hab ich in der Frage nicht eindeutig beschrieben)
Och nö, benutz doch mal die Suche hier im Forum, das gabs schon x mal wie man mit VBS alle Dateien eines Ordners verarbeitet:Und wie bekommt man das hin, dass alle Datein im Ordner durchsucht und geändert werden. Also eine schleife... (Hab ich in der Frage nicht eindeutig beschrieben)
Const FOLDER = "C:\quelle"
Const EXTENSION = "vbs"
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
regex.Global = True: regex.IgnoreCase = True: regex.MultiLine = True
regex.Pattern = "^.*PROCEDURE print[\s\S]*END OF PROCEDURE print.*"
For Each file In fso.GetFolder(FOLDER).Files
If LCase(fso.GetExtensionName(file.Name)) = LCase(EXTENSION) Then
Set fRead = fso.OpenTextFile(file.Path,1,False,-2)
content = fRead.ReadAll() : fRead.Close
fso.OpenTextFile(file.Path,2,True).Write(regex.Replace(content,""))
End If
Next
MsgBox "Fertig"
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen.