kristov
Goto Top

Unterordner durchsuchen und bei Bedingungserfüllung mitschreiben.

Hallo,

ich habe hier einen Ordner, der aus vielen Unterordnern besteht, nach dem Muster "234567 Florian Fliege", wobei die Zahl immer ein eindeutiger Wert ist. Wie es der Teufel so will, verschwinden manche dieser Unterordner in andere Unterordner und sind dann (vermeintlich) "weg" und der Jammer groß. Mittlerweile haben sich wohl einige solcher Leichen angesammelt. Diese möchte ich aufspüren, und zwar nach diesem Schema:

- Nimm alle Unterordner in diesem Ordner, die mit einer 2 beginnen, gefolgt von 5 weiteren Zahlen und einem Leerzeichen.
- Durchsuche in den Unterordnern, die dieses Kriterium erfüllen, wiederum alle Unterordner:
wenn sich in einem (oder einigen oder allen) dieser Unterordner wieder ein Unterordner befindet, der mit einer 2 beginnt, gefolgt von 5 weiteren Zahlen und einem Leerzeichen, schreibe den Pfad in eine Logdatei

Meine bisherigen Versuche sind kläglich gescheitert und werden hier nicht zur Schau gestellt face-wink die Probleme stellen sich aber so dar:

- Ordner herausfiltern, die mit 2 beginnen, gefolgt von 5 weiteren Zahlen und einem Leerzeichen (GTR 20000 als Vergleich geht leider nicht, da da auch Buchstaben gültig sind)
- Der Rest (außer vielleicht den Pfad in eine Logdatei zu schreiben...)

Zur Verdeutlichung:

Ordner1 besteht aus
234567 Florian Fliege
233445 Heinz Hirsch
215632 Fritzi Fisch

im Unterordner "215632 Fritzi Fisch" ist der Unterordner "Interessant" und darin der Unterordner "273954 Kathi Katze"

Es ist also in diesem Fall folgender Eintrag zu loggen:
Ordner1\215632 Fritzi Fischig\Interessant\273954 Kathi Katze

Kann mir hier jemand beistehen (od. ggf. ein Werkzeug nennen, das diesen Zweck erfüllen könnte?)

kristov

Content-Key: 201309

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

Printed on: April 16, 2024 at 17:04 o'clock

Member: bastla
bastla Feb 05, 2013 updated at 22:36:48 (UTC)
Goto Top
Hallo kristov!

Vielleicht ja etwas in der Art:
@echo off & setlocal
set "Basis=D:\Ordner1"  
set "Liste=D:\Pfade.txt"  

del "%Liste%" 2>nul  
(for /d %%i in ("%Basis%\*") do (  
    for /f "delims=" %%a in ('dir /s/b/ad "%%i\2????? *" 2^>nul') do (  
        echo %%~nxa|findstr /brc:"2[0-9][0-9][0-9][0-9][0-9] ">nul && echo %%a  
    )
))>"%Liste%"  
Grüße
bastla
Member: kristov
kristov Feb 06, 2013 at 08:46:56 (UTC)
Goto Top
Hallo bastla!

Das funktioniert ja auf Anhieb perfekt! Einzig mit den Umlauten in der Dateiliste gibt's Probleme, damit kann ich aber leben.

Interessant finde ich das Wildcard ?, das hat bei mir nie funktioniert. Und jetzt weiß ich auch, daß findstr doch geeignet ist, die 5 Zahlen nach der 2 rauszufiltern. Höchst begeistert bin ich von der Geschwindigkeit, mit der das ganze abläuft. Mein Einzeiler, der in etwa Zeile 7 bespricht (in bescheidenerer Ausprägung), brauchte da viel länger!

Vielen Dank!
Member: bastla
bastla Feb 06, 2013 at 14:42:12 (UTC)
Goto Top
Hallo kristov!

? funktioniert nur, weil danach noch das Leerzeichen angegeben ist (da es ja 1 oder kein Zeichen ersetzt).

Eine Steigerung der Geschwindigkeit wird dadurch erreicht, dass die gesamte Schleife in Klammern gesetzt ist und somit die Zieldatei nur einmal (und nicht für jeden gefundenen Pfad) zum Schreiben geöffnet werden muss.

Was übrigens die Umlaute angeht, könntest Du noch ein
for /f "tokens=2 delims=:." %%i in ('chcp') do set "CP=%%i"  
chcp 1252 >nul
am Beginn und
chcp %CP% >nul
am Ende des Batches versuchen.

Grüße
bastla
Member: kristov
kristov Feb 07, 2013 at 09:13:51 (UTC)
Goto Top
Vielen Dank für die erkenntnisreichen Erklärungen! Die Codepage zu ändern funktioniert auch wunderbar.

Es dankt nochmals ein wunschlos zufriedener
kristov