Batch Zeilen aus bestimmten Dateien löschen

Jeak

Lt. Junior Grade
Registriert
Sep. 2007
Beiträge
372
Hey!

Sagen wir, ich habe eine Datei "source.txt", in der in jeder Zeile ein Pfad zu einer datei steht. Zum Beispiel:
Code:
C:\ABC\x.ini
C:\DEF\x.ini
So und nun will ich in genau in diesen Dateien die Zeilen, die mit "BoeserText" anfangen, löschen.

Würde mich sehr freuen, wenn ihr mir helfen könntet :)
 
Zuletzt bearbeitet:
Das geht leider nicht, da die Batch nicht nur auf meinem Rechner ausgeführt werden soll und ich nur eine einzige Datei haben möchte, in der alles drin ist und die alles macht.
 
del c:\*.ini /q

so vielleicht?



--- Hoppla man sollte zuende lesen, sry

so ums wieder gut zumachen:

@for /F %%i in ('find/N "Böhser Text" C:\*.ini^') do del C:\*.txt \q

hinter "do" musst du halt das einfügen was du machen möchtest, wenn er den Text gefunden hat.
Einziges Problem, er sucht den "gaaanzen" Text nach dem "Böhsen Text"
 
Zuletzt bearbeitet:
Das ist glaube ich nicht, was ich will.
Er soll ja die Zeilen durchgehen, die aufgeführte Datei öffnen und in dieser dann die Zeile löschen.
 
Ich fürchte, das geht über die Fähigkeiten von Batchdateien weit hinaus.
Sowas wirst du entweder mit diversen Tools oder einem selbst geschriebenen Programm machen müssen.
 
Muss es eine Batch Datei sein?

Ansonsten kann man das zB sehr einfach über C lösen. Die Schritte sind in den meisten Sprachen gleich:

  • Du öffnest eine Datei zum lesen und schreiben.
  • Du liest in einer Schleife zeilenweise Daten ein.
  • Du analysierst die Daten via RegExp oder einer Stringvergleichfunktion.
  • Sollte alles in Ordnung sein, schreibst du die Zeile in eine Datei, ansonsten nicht (was dem löschen entspricht)
  • Wenn alles abgearbeitet ist, schließt du die Dateien wieder.
  • Solltest du unterschiedliche Dateien zum lesen und schreiben verwendet haben, löscht du die alte Datei und ersetzt sie durch eine neue.



so long
Renegade
 
Man könnte es auch mit der WSH lösen, die ist, wie das batch zeug, bei jedem Windows dabei. Bräuchte halt nur jmd, der VBS/JS kann :S. Habe das früher mal gemacht, ist sher viel angenehmer als Batch.
 
Das folgende Skript "DELBOESE.CMD" sollte das Gewünschte tun:

Code:
@ECHO OFF
FOR /F "" %%f IN ( source.txt ) DO CALL :SUB %%f
GOTO :ENDE

:SUB
TYPE %1 | FIND /V "BoeserText" > tmp
DEL %1
MOVE tmp %1

:ENDE

Temporär wird eine Datei mit dem Namen "tmp" erzeugt, die kannst du auch in ein beliebiges Verzeichnis schreiben lassen.

Edit: RENAME durch MOVE ersetzt
 
Zuletzt bearbeitet:
Danke! :)

Habe jetzt leider noch das Problem, dass meine Pfadangaben in der source.txt Leerzeichen enthalten. Damit kommt das Skript leider noch nicht zurecht.
 
Wenn's weiter nichts ist:

Code:
@ECHO OFF
FOR /F "delims=*" %%f IN ( source.txt ) DO CALL :SUB "%%f"
GOTO :ENDE

:SUB
TYPE %1 |FIND /V "BoeserText" > tmp
DEL %1
MOVE tmp %1

:ENDE

Da hilft ein Trick. Das delims=* setzt das Trennzeichen von Leerzeichen bzw. TAB auf ein Sternchen, das darf im Dateinamen nicht vorkommen. Die Hochkommas "%%f" sorgen dafür, dass ein Dateiname mit Leerzeichen als ein Parameter (%1) bearbeitet wird.
 
Zuletzt bearbeitet:
Zurück
Oben