bluebones
Goto Top

Dateien zählen via Batch-Kommando

Kam immer wieder mal vor, dass ich grobe Verzeichnis-Vergleiche gebraucht habe.

Bspw. in großen mp3-Ordnern und anschl. in den Backups. Lässt sich ohne großes Aufsehen per Batch machen.
Habe das Ding "count.bat" genannt und es in meinen registrierten Pfad gelegt.
Vielleicht kann's ja jemand brauchen -oder noch besser: vielleicht hat jemand einen Verbesserungsvorschlag!?

@ECHO OFF
SETLOCAL
SET COUNT=
SET NRCOUNT=
IF %1.==. (GOTO :ASK) ELSE GOTO :RUN

:ASK
SET /P COUNT=Pfad angeben: 
IF (%COUNT%)==() (
	ECHO Keinen Pfad angegeben.
	GOTO :END
)
GOTO :WORK

:RUN
SET COUNT=%1

:WORK
SET STRTCNT=%TIME:~0,8%
SET LOG=%NRCOUNT%_%DATE:~0,6%%DATE:~8,2%.count

FOR /F "DELIMS= " %%i in ('DIR "%COUNT%" /S /A-D^|find "Datei(en)"') DO SET NRCOUNT=%%i  
ECHO Ergebnis: %NRCOUNT% Dateien (%COUNT%)
CD /D "%COUNT%"  
ECHO Beginn:   %STRTCNT% Uhr>> "%LOG%"  
ECHO Ende:     %TIME:~0,8% Uhr>> "%LOG%"  
ECHO Ergebnis: %NRCOUNT% Dateien (%COUNT%)>> "%LOG%"  

:END
ENDLOCAL

Have fun!


[Edit Biber] Codetags nachgetragen. [/Edit]

Content-Key: 133096

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

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: bastla
bastla 11.01.2010 um 00:42:52 Uhr
Goto Top
Hallo BlueBones und willkommen im Forum!

Netter Einstieg, gleich einmal einen Tipp zu posten ... face-smile

Bis auf die Tatsache, dass %NRCOUNT% im Namen der Logdatei verwendet wird, aber zu diesem Zeitpunkt noch leer ist (bzw gar nicht existiert), wäre mir kein Fehler aufgefallen. Wozu nimmst Du übrigens das Ausführungsdatum in den Namen der Logdatei auf, wenn es ohnehin aus dem Inhalt ersichtlich ist? Wenn denn das Datum verwendet wird, würde ich eher zur Schreibweise "JJJJ-MM-TT" tendieren (ist leichter zu sortieren).

Unter diesem Aspekt (und etwas besser abgesichert sowie ein wenig gestrafft) würde ich folgende Schreibweise wählen:
@ECHO OFF & SETLOCAL
SET "COUNT=%~1"  
SET NRCOUNT=0
IF NOT DEFINED COUNT GOTO :ASK
IF EXIST "%COUNT%\" GOTO :WORK  

:ASK
SET /P COUNT=Pfad angeben:
IF NOT DEFINED COUNT ECHO Keinen Pfad angegeben. & GOTO :EOF
IF NOT EXIST "%COUNT%\" ECHO Keinen gueltigen Pfad angegeben. & GOTO :EOF  

:WORK
SET STRTCNT=%TIME:~0,8%
SET LOG=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%.count

CD /D "%COUNT%"  
FOR /F %%i IN ('DIR /S /A-D 2^>NUL^|FIND "Datei(en)"') DO SET NRCOUNT=%%i  

ECHO Ergebnis: %NRCOUNT% Dateien (%COUNT%)
>>"%LOG%" ECHO Beginn:   %STRTCNT% Uhr  
>>"%LOG%" ECHO Ende:     %TIME:~0,8% Uhr  
>>"%LOG%" ECHO Ergebnis: %NRCOUNT% Dateien (%COUNT%)  
>>"%LOG%" ECHO\   
Grüße
bastla

P.S.: Für die Formatierung als "Code" siehe ...
Mitglied: BlueBones
BlueBones 11.01.2010 um 02:59:52 Uhr
Goto Top
Uff - meine Güte! Da hab' ich ja wirklich noch Einiges zu lernen (im Grunde bin ich auch deswegen hier).

Hab' vielen Dank für Deine Mühe! Wirklich nett gemacht und tatsächlich in 'nem Test (nicht nur irgendwie) schneller.
In meinem "vorherigen Leben" im technischen Support eines Großunternehmens war ich - so wie viele andere - berufsbedingt ein bisschen faul.
Um faul bleiben, aber zeitgleich effektiver sein zu können, habe ich ein bisschen mit Batchen angefangen face-wink)
Hat mir (und meiner Gruppe) übrigens sehr geholfen!

Solche Lehrstücke wie die Deinen bringen mich da sicher weiter (damit sind auch vielel andere Beiträge gemeint).
Habe hier auch schon Einiges Nettes von Dir gesehen.
Vielen Dank nochmals dafür und * RESPEKT * (auch in Vetretung anderer hier)

Kleine Frage hätt' ich noch:
Wofür steht in Z. 17 die 2 im Ausdruck (...) ('DIR /S /A-D 2^>NUL^|FIND "Datei(en)"') (...)
... und eine kleine Antwort:
Falls sich neue (z. B. mp3-) Dateien neu in ein Verzeichnis gesellen, sehe ich zur Kontrolle die Daten der Zählung.

Du hast natürlich Recht: Der Ausdruck SET LOG=%NRCOUNT%_%DATE:~0,6%%DATE:~8,2%.count gehört DIREKT VOR die Ausgabe ins Log.
Dann bekomme ich in einem Beispiel ein Log-File, das 437_11.01.10.count heißt.
Die Uhrzeiten sind nur für Info-Zwecke (Im Root meiner MP3-Freigabe gibt es immer mehr Dateien) face-wink
Es gibt doch sicher die Möglichkeit, dass das Skript alle Dateien nicht (!) mitzählt, die *.count heißen, oder?

"Servus!" aus der Nähe von München!
Mitglied: TheDarkLord
TheDarkLord 11.01.2010 um 09:33:41 Uhr
Goto Top
Hallo face-smile

Zitat von @BlueBones:
[...]
Wofür steht in Z. 17 die 2 im Ausdruck (...) ('DIR /S /A-D 2^>NUL^|FIND "Datei(en)"') (...)
[...]
Soweit ich weiss, ist das eine Maskierung, damit die Fehlermeldung "Keine Dateien gefunden" unterdrückt wird, falls Du mal einen leeren Pfad angibst, oder Bastla?

Zitat von @BlueBones:
[...]
Es gibt doch sicher die Möglichkeit, dass das Skript alle Dateien nicht (!) mitzählt, die *.count heißen, oder?
[...]
@ECHO OFF & SETLOCAL
SET "COUNT=%~1"  
SET EXCLUDE=0
SET NRCOUNT=0
SET NRCOUNT2=0
SET GESAMT=0
SET EXCLUDE=0
IF NOT DEFINED COUNT GOTO :ASK
IF EXIST "%COUNT%\" GOTO :WORK  

:ASK
SET /P COUNT=Pfad angeben:
IF NOT DEFINED COUNT ECHO Keinen Pfad angegeben. & GOTO :EOF
IF NOT EXIST "%COUNT%\" ECHO Keinen gueltigen Pfad angegeben. & GOTO :EOF  

:WORK
SET STRTCNT=%TIME:~0,8%
SET LOG=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%.count

SET EXCLUDE=%COUNT%\*.count 
FOR /F %%i IN ('DIR %COUNT% /S /A-D 2^>NUL^|FIND "Datei(en)"') DO SET NRCOUNT=%%i  
FOR /F %%j IN ('DIR %EXCLUDE% /S /A-D 2^>NUL^|FIND "Datei(en)"') DO SET NRCOUNT2=%%j  
SET /A GESAMT=%NRCOUNT%-%NRCOUNT2%

ECHO Ergebnis: %GESAMT% Dateien (%COUNT%)
>>"%LOG%" ECHO Beginn:   %STRTCNT% Uhr  
>>"%LOG%" ECHO Ende:     %TIME:~0,8% Uhr  
>>"%LOG%" ECHO Ergebnis: %GESAMT% Dateien (%COUNT%)  
>>"%LOG%" ECHO\   
Zeile 20 setzt ne zweite Variable mit dem vorher eingegebenen Pfad und *.count als Endung, also z.B. c:\windows\*.count
Zeile 22 zählt alle *.count Dateien und speichert die in NRCOUNT2
Zeile 23 zieht NRCOUT2 von NRCOUT ab

Eigentlich also recht simples Prinzip:
Erst werden ALLE Dateien gezählt, dann werden alle *.count Dateien gezählt und diese von der Gesamtmenge dann abgezogen.
Habe es mit c:\windows und *.bmp gestestet: Funktioniert sowohl mit Aufruf ohne Argument, dann wird nach Pfad gefragt und gerechnet, als auch mit übergebenem Pfad als Argument!

Gruß Dark
Mitglied: Biber
Biber 11.01.2010 um 10:22:38 Uhr
Goto Top
Moin BlueBones,

willkommen im Forum.

Eine Alternative zum zweimaligen Zählen der Dateien und Differenzbildung wäre ein "Verstecken" der *.count-Dateien vor dem normalen DIR-Befehl.

Das ließe sich mit einer weiteren (neuen letzten) Halbzeile lösen:
attrib +h %log%

Damit bekommt die Datei %log% das Attribut "hidden" und ist für alle DIR-Wildcard-Abfragen ausgeblendet, wird also bei "DIR /s /A-d" nicht mitgezählt.
Bei namentlich exakten Zugriffen wie z.b. "IF EXIST %log% .." ist das Verhalten aber wie bei allen anderen Dateien auch.

Noch einfacher ist es natürlich, wenn du die (ohnehin nur temporär interessante) %log%-Datei immer ins %Temp%-Verzeichnis schreiben lässt.
Dann wird sie nie mitgezählt, außer in dem Fall, dass dich die %temp%-Dateienanzahl interessiert. Und dann wäre es ja korrekt. face-wink

BTW, die Datums-Ableitung würde bei mir (WIN XP SP2) ein bisschen putzige Ergebnisse liefern (Demo am CMD-Prompt):
>SET LOG=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%.count

(=10:07:33  D:\temp=)
>echo [%date%] [%log%]
[11.01.10] [1.10-1.-11.count]

Grüße
Biber
Mitglied: TheDarkLord
TheDarkLord 11.01.2010 um 10:30:02 Uhr
Goto Top
So gehts natürlich auch face-smile
Ursprünglich hatte ich das mit dem zweiten Zählen so gedacht, dass man z.B. einen bestimmten Dateityp nicht gezählt haben möchte, wie z.B. alles außer BMP oder alles ausser EXE etc pp.
Und die alle vorher zu verstecken und danach wieder zu "entstecken" ist ja nun doch recht aufwändig!
Aber in diesem Fall ist Dein Vorschlag natürlich der sehr viel schönere und elegantere.

Ist denn die Log-Datei nur temprär interessant? Er lässt sie doch mit >> immer erweitern, also hatte ich angenommen, dass diese bestehen bleiben soll und nicht wieder gelöscht wird. Deshalb hatte ich sie ja auch "auszählen" lassen und nicht in %temp% erstellen lassen face-smile

Gruß Dark
Mitglied: Biber
Biber 11.01.2010 um 10:43:22 Uhr
Goto Top
Moin Dunkellurch,

ich gehe davon aus, dass diese %log%-Datei nur temporär interessant ist, weil die ja einen Tagesstempel erhält.
Und eigentlich kenne ich in meinem Verwandten- und Bekanntenkreis niemanden, der Vergleichsstudien oder Statistiken darüber führt, wieviele Dateien er/sie am 5.1.2010, am 8.1.2010 und am 11.1.2010 im Verzeichnis e:\schnipsel oder f:\neues-aus-bullerbü gehabt hat.
Und erst recht nicht, wieviele es am 11.1.2010 morgens, mittags und abends waren.
Und du kannst mir glauben, da sind schon einige ErbsenzählerInnen dabei in diesem Zirkel. face-wink

Grüße
Biber
Mitglied: TheDarkLord
TheDarkLord 11.01.2010 um 10:44:54 Uhr
Goto Top
xDDDD ok Du hast mich überzeugt - das habe ich nicht bedacht und beim näheren nachdenken würde mich das auch nicht wirklich interessieren face-smile
Mitglied: BlueBones
BlueBones 11.01.2010 um 12:23:12 Uhr
Goto Top
Servus zusammen,

es ist erstaunlich sehen zu können, wie man sich hier um selbst die kleinsten Belange/Belanglosigkeiten rührend kümmert.
Namentlich an die Herrschaften "bastla", "Biber" und "TheDarkLord" meinen vebindlichsten Dank für die Mühen und die offenkundige Bereitschaft auch Newbies wie mich bei seinen ersten (wirklichen) Schritten zu unterstützen.

Das Einzige, das mich nun im Nachhinein ärgert, ist der Umstand, dass ich nicht schon viel viel früher hier aufgeschlagen bin, um mein Admin-Leben zu erleichtern bzw. meinen Horizont etwas zu erweitern. Aber das ist ja nun - Gott Lob! - in Arbeit face-wink

Ich werde mir die Tutorials reinziehen und bin natürlich auch für weitere interessante Links dankbar.

Best wishes - BlueBones
Mitglied: BlueBones
BlueBones 11.01.2010 um 14:44:19 Uhr
Goto Top
Noch 'ne kleine Anmerkung:
Habe mich natürlich nicht hingesetzt und das Ding gebaut, um Verz. mit ein paar Dateien grob zu zählen.
In meiner MP3-Freigabe sind's inzwischen ca. 80.000 Dateien. Da ich backup'e, vergleiche ich in groben Zügen Quelle und Ziel.
Darum geht's face-wink

Jedenfalls besten Dank an alle hier! Bringt mich schon mal weiter!

Beste Wünsche an alle (nicht nur für dieses neue Jahr)!

Gruß - Bluebones
Mitglied: bastla
bastla 11.01.2010, aktualisiert am 18.10.2012 um 18:40:49 Uhr
Goto Top
@Biber
BTW, die Datums-Ableitung würde bei mir (WIN XP SP2) ein bisschen putzige Ergebnisse liefern
Wenn Du auch so genügsam bist und Dir noch nicht einmal 4-stelllige Jahreszahlen leistest ... face-wink Mit
IF %DATE:~-3,1%==. (SET "DATUM=%DATE:~-2%-%DATE:~-5,2%-%DATE:~-8,2%") ELSE (SET "DATUM=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%")  
SET LOG=%DATUM%.count
sollte es dann eigentlich allen recht getan sein ...

... ansonsten wüsste ich ein sehr empfehlenswertes Tutorial zu diesem Thema. face-wink
Damit bekommt die Datei %log% das Attribut "hidden" und ist für alle DIR-Wildcard-Abfragen ausgeblendet, wird also bei "DIR /s /A-d" nicht mitgezählt.
Kann ich so nicht bestätigen (obwohl auch bei mir XP SP2) - durch "/A-d" werden schließlich nur Verzeichnisse von der Anzeige/Zählung ausgeschlossen; es müsste demnach schon ein "/A-d-h" sein ...
@TheDarkLord
Zum Thema "2>NUL"
Soweit ich weiss, ist das eine Maskierung, damit die Fehlermeldung "Keine Dateien gefunden" unterdrückt wird, falls Du mal einen leeren Pfad angibst
Genau genommen ist es die Umleitung der Fehlermeldung "Datei nicht gefunden" (die auf Kanal 2 = STDERR ausgegeben wird) für den Fall, dass im oder unter dem angegebenen Pfad keine Dateien enthalten sind (was Du vermutlich auch so gemeint hast).

Grüße
bastla
Mitglied: bastla
bastla 11.01.2010 um 15:34:17 Uhr
Goto Top
Hallo BlueBones!

Es ist immer wieder erfreulich, User hier zu treffen, die tatsächlich Interesse am Scripten/Batchen haben und lernen und auch selbst etwas beitragen wollen - daher: You're welcome ... face-smile

Grüße
bastla
Mitglied: Biber
Biber 11.01.2010, aktualisiert am 18.10.2012 um 18:40:49 Uhr
Goto Top
Moin bastla,

Zitat von @bastla:
@Biber
> BTW, die Datums-Ableitung würde bei mir (WIN XP SP2) ein bisschen putzige Ergebnisse liefern
Wenn Du auch so genügsam bist und Dir noch nicht einmal 4-stelllige Jahreszahlen leistest ... face-wink
Bringt doch nix.... auf meiner EC-Karte hatte ich das Jahr 2010 vierstellig..... und?
War es dadurch lesbarer?

IF %DATE:~-3,1%==. (SET "DATUM=%DATE:~-2%-%DATE:~-5,2%-%DATE:~-8,2%") ELSE (SET "DATUM=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%")
Genau wegen einem derartigen Gestrunkele halten viele Newbies das Batchen für etwas total Archaisches.... Muster in Lochkarten beißen oder so..*gg

... ansonsten wüsste ich ein sehr empfehlenswertes Tutorial zu diesem Thema. face-wink
Ja nee.... im Prinzip schon....
Aber in diesem Fall würde mein Namenermittlungsalgorithmus ohnehin lauten "Set "Log=con" ...
...sprich ich will es eigentlich immer nur auf dem Bildschirm haben zum "JETZT mal schnell draufgucken"
und sollte ich es jemals dauerhaft haben wollen, DANN leite ich das Ergebnis des Count.cmd-Batches um mit "> irgendne.log"...
> Damit bekommt die Datei %log% das Attribut "hidden" und ist für alle DIR-Wildcard-Abfragen ausgeblendet, wird
also bei "DIR /s /A-d" nicht mitgezählt.
Kann ich so nicht bestätigen (obwohl auch bei mir XP SP2) - durch "/A-d" werden schließlich nur Verzeichnisse
von der Anzeige/Zählung ausgeschlossen; es müsste demnach schon ein "/A-d-h" sein ...
Jepp, stimmt.... das war zwar mein erster geposteter ungetesteter Batch-Tipp in diesem Jahr und somit auch der einzige falsche.
Andererseits ist damit meine Jahresquote bei 100 Prozent fehlerhafte Tipps....*grmpf*
Ich hatte in der Tat nur das Ergebnis eines "Dir /b ..." (also OHNE Attributeingrenzung mit /a) vor Augen und nix überprüft.

Also zusammengefasel^H^H zusammengefasst

Ich würde es gar nicht in einer .count-Datei persistieren. Sondern nur auf dem Monitor lesen wollen.
--> wenn ich aber FDPartig meine Meinung um 180 Grad drehen sollte und doch eine Datei anlegen würde
> würde ich die niemals nicht in dem selben Verzeichnis anlegen wollen in dem ich Dateien zähle
> Wenn ich aber eine weitere Westerwelle mache und doch die Datei dort speichere wo ich Dateien zähle
> dann müsste ich mir einen abbrechen mit Attribute setzen + Attribute ausblenden und der ganze Batch wäre so stringent und spielerisch elegant wie die Tigerentenkoalition.

@BlueBones
Nein, keine Angst, wir machen hier nicht um jeden Mehrzeiler so ein Aufhebens..*lüüüüüüüüüg*

Grüße
Biber
Mitglied: bastla
bastla 11.01.2010 um 17:10:37 Uhr
Goto Top
@Biber
Abgesehen davon, dass ich ohnehin nicht einfach aus Prinzip zum Widerspruch neige, würde mir ein solcher hinsichtlich Deiner Argumente auch nicht wirklich leicht fallen (wobei eine erste zarte Hinterfragung der Sinnhaftigkeit zumindest des Datums im Dateinamen sogar schon bei meinem ersten Kommentar oben zu finden wäre) ...

... aber andererseits gilt auch hier (zumindest für mich) einmal mehr: Wir spielen ja nur ... face-wink

Grüße
bastla
Mitglied: BlueBones
BlueBones 11.01.2010 um 18:37:03 Uhr
Goto Top
Ursrünglicher Hintergrund das Ganzen waren ja nicht grobe Vergleiche von Quelle und Ziel (trotz wirklich großer privater Backups wie eingangs erwähnt), sondern der schnelle (ganz wichtig!) Vergleich zwischen aktualisierten und nicht aktualisierten CID-Bäumen auf Code-Servern, in denen die verschalten Produkte herumliegen.
Ein robocpy-Job wäre viel zeitaufwändiger und mit /MIR hat man schon einiges Übel angerichtet und bei /S /E bläht sich der CID-Baum natürlich auf.
Zu allem Übel sind in den zentralen StO die CID-Verzeichnisse nicht immer gepflegt und somit auf unterschiedlichem Stand face-sad Je nach Großwetterlage face-wink
"Na, dann mach' 'ma...!" heißt's dann nur. Danke schön!

Halbwertszeiten verschiedener Produkte werden immer kürzer heutzutage. Das ist Euch sicher nicht neu. Einfach löschen kannste nicht, weil immer Laptops unterwegs sind, die noch die Vor-Vor-Version haben und erst mal ein Update auf die Vor-Version brauchen usw. usf.

Nachdem ich mir nun doch Einiges anlesen konnte, hab' ich hier nun die Endversion, mit der ich gut zurechtkomme.
Die Log-Files brauche ich tatsächlich im demjenigen Verzeichnis, in dem ich gezählt habe, um zu sehen, ob eine Veränderung stattfand (erst dann geh' ich ans Eingemachte) und ich kann meinen "Master-Code-Baum" ohne Sorge zusammenbasteln. Ein- bis zweimal im Monat gibt es neue Release oder Relase-Updates oder eben auch Hotfixe.

ICH DANKE EUCH FÜR DIE PROMPTE HILFE UND DAS ZUR VERFÜGUNG GESTELLTE KNOWHOW.
Ich gebe nicht auf und mache weiter face-smile
Mitglied: zensbert
zensbert 27.01.2010 um 20:37:32 Uhr
Goto Top
Halloi!! Habe mal wieder nen Special-Wunsch..

Wie zähle ich die Ordner in einem Pfad ohne Unterordner in einem Verzeichnis?

Danke,
Thomas
Mitglied: bastla
bastla 27.01.2010 um 20:49:39 Uhr
Goto Top
Hallo chizophren!

So ganz sicher bin ich mir ja nicht, Deinen Wunsch verstanden zu haben, aber falls Du nur wissen willst, wie sich die Anzahl der unmittelbaren Unterordner eines gegebenen Ordners ermitteln lässt, dann etwa so:
@echo off & setlocal
set "Pfad=D:\Dein Pfad"  

if not exist "%Pfad%\" echo "%Pfad%" nicht gefunden! & goto :eof  
set /a Root=0
for %%i in ("%Pfad%") do if "%%~nxi"=="" set /a Root=2  
for /f %%i in ('dir /ad "%Pfad%"') do set Ordner=%%i  
set /a Ordner=%Ordner%-2+%Root%
echo %Ordner%
Grüße
bastla

[Edit] Kleinere Ergänzungen nachgereicht [/Edit]
Mitglied: zensbert
zensbert 27.01.2010 um 21:18:53 Uhr
Goto Top
dankeschön, hast mir wie immer geholfen!!
Mitglied: Biber
Biber 27.01.2010 um 21:19:33 Uhr
Goto Top
@bastla

Würde nicht ein einfaches
for /f %i in ('dir /ad d:\temp ^|find "Verzeichnis(se)"') do @echo %i
39
...reichen? Oder muss es wirklich "gezählt" werden? face-wink

Grüße
Biber
Mitglied: bastla
bastla 27.01.2010 um 21:22:51 Uhr
Goto Top
@Biber
"Gezählt" habe ich ja auch nicht, sondern nur "." und ".." zu ignorieren versucht - allerdings lässt sich durch das "find" natürlich die Anzahl der "set" auf 1 reduzieren ...

Aber: Da ich ja nun auch nicht mehr der Schnellste bin, war das Ganze eigentlich noch "work in progress" ... face-wink

Grüße
bastla
Mitglied: Biber
Biber 27.01.2010 um 21:53:50 Uhr
Goto Top
Moin bastla,

::: war das Ganze eigentlich noch "work in progress" .
Ist bei mir ja auch nicht anders. Bei meinem Schnellschuss ist die Zahl "39" auch [normalerweise] die Zahl der Unterverzeichnisse inklusive This und Parent bzw Pünktchen und Anton.

Eigentlich muss ich ebenfalls "." und ".." rausrechnen mit "Set /a -2...." ..... eigentlich....

Gilt aber nur nur, wenn es kein Root-Verzeichnis, kein "Dir /ad C:\" ist.... da gibt es weder "." noch ".."
[Oder aber, wenn ein irrwitziger Anwender die "." und ".."-Verzeichnisse per Registry-Eintrag unterdrückt.... okay, Wahrscheinlichkeit < 0,06%]

So oder so - dein Ansatz ist bei nochmaligem Hingucken doch der Zuverlässige... ich ziehe meine Frage zurück

Grüße
Biber