CMD: Dir AD gibt unterschiedliche Anzahl gefundener Verzeichnisse aus
Hallo Fachleute
Warum gibt mir in einer Batch-Datei
die richtige Anzahl der Verzeichnisse <Test> an, also 4 Stück
und
weist in der Variable anzahl_gefunden_Pfad_1 deren 17 aus, wobei da auch <Testtest>, <Testtesttest>, <Test1>, <Test1test1> etc. mitgezählt wird
Dies unabhängig davon, ob ich dir /A:D/ /S oder dir /AD /S schreibe und
unabhängig ob C:\Users\xyz\test in "" steht oder nicht?
Versuche nach dem Verzeichnisnahmen Sonderzeichen wie !,#,$ anzufügen haben nichts genützt.
Ich suche eine Lösung ohne Powershell, also am Liebsten klassisch mit DOS-Befehlen
Warum gibt mir in einer Batch-Datei
dir /A:D /S C:\Users\xyz\test
und
for /F %%i in ('dir /A:D /S C:\Users\xyz\test') do set /A anzahl_gefunden_Pfad_1=anzahl_gefunden_Pfad_1+1
Dies unabhängig davon, ob ich dir /A:D/ /S oder dir /AD /S schreibe und
unabhängig ob C:\Users\xyz\test in "" steht oder nicht?
Versuche nach dem Verzeichnisnahmen Sonderzeichen wie !,#,$ anzufügen haben nichts genützt.
Ich suche eine Lösung ohne Powershell, also am Liebsten klassisch mit DOS-Befehlen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 638931
Url: https://administrator.de/contentid/638931
Ausgedruckt am: 23.11.2024 um 14:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo @Berner,
füge dem DIR-Befehl noch die Option /B hinzu, damit die Header- und Footer-Ausgaben des DIR-Befehls bei der Ausgabe unterdrückt werden. Bei Deiner derzeitigen Konstruktion der FOR-Schleife zählst Du die nämlich mit.
Außerdem könntest Du für Debug-Zwecke den Body der FOR-Schleife durch eine simple Ausgabe ersetzen, dann wäre Dir der Fehler auch selbst aufgefallen.
Grüße
Friemler
füge dem DIR-Befehl noch die Option /B hinzu, damit die Header- und Footer-Ausgaben des DIR-Befehls bei der Ausgabe unterdrückt werden. Bei Deiner derzeitigen Konstruktion der FOR-Schleife zählst Du die nämlich mit.
Außerdem könntest Du für Debug-Zwecke den Body der FOR-Schleife durch eine simple Ausgabe ersetzen, dann wäre Dir der Fehler auch selbst aufgefallen.
Grüße
Friemler
Drei Dinge vorab:
1) Ohne Option /B besteht die Ausgabe von DIR nicht nur aus den Pfaden. Deine FOR /F Schleife verarbeitet alle Zeilen die nicht leer sind, unabhängig davon ob sie einen Pfad enthalten oder irgendetwas anderes.
2) DIR sucht im Verzeichnis von C:\users\xyz\test. Es ist kein Wildcard Zeichen angegeben was DIR dazu bringen würde das letzte Element als Suchpattern zu werten.
3) Mit der Angabe eines Wildcard Zeichens wird ein Patternmatching betrieben. Um tatsächlich nur Verzeichnisse aufzulisten die auf \test enden (und nicht auf \testfoobar o.ä.) musst du die Ausgabe an FINDSTR weitergeben und gezielt filtern.
Etwa so:
Und wo du schon dabei bist, kannst du das Zählen auch FIND überlassen.
In eine FOR /F Schleife verpackt, müssen die Pipes maskiert werden
Steffen
1) Ohne Option /B besteht die Ausgabe von DIR nicht nur aus den Pfaden. Deine FOR /F Schleife verarbeitet alle Zeilen die nicht leer sind, unabhängig davon ob sie einen Pfad enthalten oder irgendetwas anderes.
2) DIR sucht im Verzeichnis von C:\users\xyz\test. Es ist kein Wildcard Zeichen angegeben was DIR dazu bringen würde das letzte Element als Suchpattern zu werten.
3) Mit der Angabe eines Wildcard Zeichens wird ein Patternmatching betrieben. Um tatsächlich nur Verzeichnisse aufzulisten die auf \test enden (und nicht auf \testfoobar o.ä.) musst du die Ausgabe an FINDSTR weitergeben und gezielt filtern.
Etwa so:
dir /ad /s /b "C:\users\xyz\test*"|findstr /eic:"\\test"
dir /ad /s /b "C:\users\xyz\test*"|findstr /eic:"\\test"|find /c /v ""
for /f %%i in ('dir /ad /s /b "C:\users\xyz\Test*"^|findstr /eic:"\\Test"^|find /c /v ""') do echo %%i