for Schleife mit Unterverzeichnissen
Hallo zusammen!
Ich habe bereits das passende Skript von Biber gefunden, nur leider läuft das nur im aktuellen Verzeichnis und nimmt nicht alle Unterverzeichnisse mit.
Folgendes soll geschehen:
- suche in allen Unterverzeichnissen alle msg-Dateien durch nach dem String xyz
- wenn du xyz in irgendeiner msg-Datei in irgendeiner Zeile findest, lösche die komplette Zeile
- die modifizierte Datei soll im selben Verzeichnis mit selben Namen bestehen bleiben
folgendes Skript von Biber läuft einwandfrei, aber nimmt eben nur das aktuelle Verzeichnis mit:
@echo off & setlocal
for %%i in (*.msg) DO (
findstr /v /b /i "xyz" "%%~fi">"%%~fi.bak"
move "%%~fi.bak" "%%~fi"
)
Wie kann ich das erweitern auf Unterverzeichnisse?
Danke vorab und Grüße,
Markus.
Ich habe bereits das passende Skript von Biber gefunden, nur leider läuft das nur im aktuellen Verzeichnis und nimmt nicht alle Unterverzeichnisse mit.
Folgendes soll geschehen:
- suche in allen Unterverzeichnissen alle msg-Dateien durch nach dem String xyz
- wenn du xyz in irgendeiner msg-Datei in irgendeiner Zeile findest, lösche die komplette Zeile
- die modifizierte Datei soll im selben Verzeichnis mit selben Namen bestehen bleiben
folgendes Skript von Biber läuft einwandfrei, aber nimmt eben nur das aktuelle Verzeichnis mit:
@echo off & setlocal
for %%i in (*.msg) DO (
findstr /v /b /i "xyz" "%%~fi">"%%~fi.bak"
move "%%~fi.bak" "%%~fi"
)
Wie kann ich das erweitern auf Unterverzeichnisse?
Danke vorab und Grüße,
Markus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 88456
Url: https://administrator.de/contentid/88456
Ausgedruckt am: 23.11.2024 um 08:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo InTreaTer!
Das war auch schon bei der oben geposteten Fassung so - geschrieben werden alle Zeilen, die nicht mit "xyz" beginnen.
Um das Neuschreiben von Dateien, die ohnehin den Suchbegriff nicht enthalten, zu vermeiden, müsste das etwa so aussehen:
Grüße
bastla
Das war auch schon bei der oben geposteten Fassung so - geschrieben werden alle Zeilen, die nicht mit "xyz" beginnen.
Um das Neuschreiben von Dateien, die ohnehin den Suchbegriff nicht enthalten, zu vermeiden, müsste das etwa so aussehen:
@echo off & setlocal
for /f "delims=" %%i in ('dir /s /b *.msg') do (
findstr /b /i "xyz" "%%i">nul && (
findstr /v /b /i "xyz" "%%i">"%%i.bak"
move "%%i.bak" "%%i">nul
)
)
Grüße
bastla
Moin Eintreter,
dann kannst Du es so ändern:
[ungetestet wie immer]
Das erste Findstr /s /m /b /i "xyz" "D:\einverz\*.msg" sucht in allen Unterverzeichnissen unter D:\Einverz nach *.msg-Dateien mit dem Suchtext "xyz" und liefert nur den Dateinamen (mit Pfad).
Ersetzt also das DIR in oberen Schnipsel.
Grüße
Biber
dann kannst Du es so ändern:
@echo off
REM noch überflüssig: & setlocal
for /f "delims=" %%i in ('findstr /s /m /b /i "xyz" "D:\einverz\*.msg"') do (
findstr /v /b /i "xyz" "%%i">"%%i.bak"
move "%%i.bak" "%%i">nul
)
Das erste Findstr /s /m /b /i "xyz" "D:\einverz\*.msg" sucht in allen Unterverzeichnissen unter D:\Einverz nach *.msg-Dateien mit dem Suchtext "xyz" und liefert nur den Dateinamen (mit Pfad).
Ersetzt also das DIR in oberen Schnipsel.
Grüße
Biber