kriegstreiber
Goto Top

FOR Schleife gibt einen Fehler aus, der sich mit Umleitung 2-zu-nul nicht unterdrücken lässt

Wieder fehlt es mir an der Idee der Lösung, weil es ja eigentlich kein Fehler ist, sondern die logische Konsequenz meines Befehls.
Was hab ich vor ?

Eine FOR Schleife die einen Ordner samt Unterordner nach Dateitypen durchsucht, FALLS diese gefunden werden do ...
Im Endeffekt eine Kombi aus FOR und IF, so der Gedankengang. So jetzt das kuriose, hier mein BAT Schnipsel:

set TXTFILES=0
for /F %%i in ('dir /b /s *.txt') do set /A TXTFILES=TXTFILES+1 >nul  
echo  TXTFILES Files  = [%TXTFILES% File(s)]

So weit so gut, also die Funktion ist gegeben, der Befehl geht einwandfrei, aber ich habe einen kosmetischen Fehler face-sad.
Und zwar diese Schleife hier: for /F %%i in ('dir /b /s *.txt')

Befindet sich wenigstens eine txt Datei im genannten Ordner oder unterordner ist alles fein, er zeigt mir schön die Anzahl an.
Doch wenn keine TXT vorhanden ist, kommt logischerweise diese Fehlermeldung : Keine Datei(en) gefunden, welche widerlich im
CMD Display auftaucht. Also hab ich gedacht, KT, du bist n schlaues Kerlchen und schickst den Driet mit 2>nul ins Nirwana.
Funktioniert auch, aaaaaaaaber die Ausgabe in Zeile 3 sieht jetzt so aus: TXTFILES Files = [3 File(s)]. Wo zum Geier
zaubert der jetzt die "3" her wo ich in Zeile 1 TXTFILES mit "0" deklariere ?. Jetzt das interessante, mache ich 2>nul wieder weg,
beglückt mich wieder Keine Datei(en) gefunden, aber TXTFILE wird korrekt als "0" dargestellt. So oder so keine der beiden
Lösungen befriedigen mich. Es nutzt auch nix ne If Schleife hinter do zu setzen mit Errorlevel, weil der "Fehler der ja keiner ist"
bereits in der Schleife vorkommt.

Ich vermute der ganze Befehl ist so für den Popo, es gibt garantiert eine einfachere Art, einen Ordner samt Unterordner zu
durchsuchen und die Anzahl der gefundenen Dateien darzustellen ohne Fehlermeldung wenn KEINE gefunden wird.

Content-ID: 325471

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

rubberman
Lösung rubberman 04.01.2017 aktualisiert um 20:33:53 Uhr
Goto Top
Hallo Kriegstreiber

Leite die Fehlermeldung des DIR Befehls gleich um.
... in ('dir /b /s *.txt 2^>nul') do ...   

ggf. kannst du FIND /C zum Zählen nutzen, à la
for /F %%i in ('dir /b /s *.txt 2^>nul ^| find /c /v ""') do set /a TXTFILES=%%i  

Grüße
rubberman
Kriegstreiber
Kriegstreiber 04.01.2017 um 21:40:03 Uhr
Goto Top
Mein Held. Lösung 1 ging nicht (Ausgabe Syntax Fehler an dieser Position sagte er mir), aber Lösung 2 brachte den Erfolg face-smile. Vielen Dank.
rubberman
rubberman 04.01.2017 um 21:45:29 Uhr
Goto Top
Gerne face-smile

ging nicht
Pünktchen durch das ersetzt, was da hin gehört?
Naja, egal.