intreater
Goto Top

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.

Content-Key: 88456

Url: https://administrator.de/contentid/88456

Printed on: April 19, 2024 at 08:04 o'clock

Member: bastla
bastla May 26, 2008 at 12:27:38 (UTC)
Goto Top
Hallo InTreaTer!

Etwa so:
@echo off & setlocal
for /f "delims=" %%i in ('dir /s /b *.msg') do (  
    findstr /v /b /i "xyz" "%%i">"%%i.bak"  
    move "%%i.bak" "%%i"  
)
Grüße
bastla
Member: InTreaTer
InTreaTer May 27, 2008 at 07:55:31 (UTC)
Goto Top
leider nicht ganz. Der schreibt mir ALLE Dateien neu, nicht nur die mit xyz drin. face-sad
Member: bastla
bastla May 27, 2008 at 08:47:25 (UTC)
Goto Top
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:
@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
Member: Biber
Biber May 27, 2008 at 08:55:31 (UTC)
Goto Top
Moin Eintreter,

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  
)
[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
Member: InTreaTer
InTreaTer May 27, 2008 at 12:00:30 (UTC)
Goto Top
Hallo bastla,
hallo Biber,

die Methode von bastla hat zum Erfolg geführt. Jetzt haut es hin. Vielen Dank an dieser Stelle!

Bei dir, Biber ist ein Fehler im Skript. Eine Klammer ist hinter do auf jeden Fall zu wenig, aber irgendwas frisst er trotzdem nicht,...

Aber wie gesagt, es haut hin und das ist die Hauptsache face-smile


Viele Grüße,

Markus.