ghostx
Goto Top

Simple Batch-Datei soll Anzahl Dateien im Verzeichnis zählen

Hallo Gemeinde,

benötige eine Batch-Datei die im Verzeichnis X die Anzahl der Dateien zählt und bei mehr als bspw 100 Dateien eine andere Batch-Datei startet.
Ungefähr so:
IF Anzahl Dateien in C:\test > 100
THEN starte Programm.bat
ELSE exit

Ist wahrscheinlich was ganz simples aber habe leider überhaupt keine Ahnung von Batch und deshalb frage ich euch. Ich hoffe einer kann mir helfen.

Grüße

Content-ID: 216189

Url: https://administrator.de/forum/simple-batch-datei-soll-anzahl-dateien-im-verzeichnis-zaehlen-216189.html

Ausgedruckt am: 23.12.2024 um 14:12 Uhr

Penny.Cilin
Penny.Cilin 05.09.2013 um 12:05:34 Uhr
Goto Top
Hallo,

schon mal die Suchfunktion benutzt?
Wenn ich die Begriffe dateien zählen angebe, bekomme ich hier im Forum jede Menge Treffer.


Gruss Penny.
colinardo
colinardo 05.09.2013 aktualisiert um 12:13:27 Uhr
Goto Top
Moin ghostX,
und täglich grüßt das Murmeltier ...
@echo off
set "pfad=C:\test"  
for /f %%k IN ('dir "%pfad%" /b /A-D ^| find /c /v ""') DO @(  
	if %%k GTR 100 (echo Mehr als 100 Dateien) else (echo weniger als 100 Dateien)
)
Grüße Uwe
ghostX
ghostX 05.09.2013 um 13:02:01 Uhr
Goto Top
Hallo Uwe,

danke für die schnelle Hilfe.
Kann ich jetzt nach dem "echo Mehr als 100 Dateien" noch "start xyz.bat" schreiben damit eine andere bat aufgerufen wird und nach dem else einfach "exit" schreiben damit das Fenster geschlossen wird?
colinardo
colinardo 05.09.2013 aktualisiert um 18:04:03 Uhr
Goto Top
So kannst du jeden Befehl in eine neue Zeile setzen.
@echo off
set "pfad=C:\test"  
for /f %%k IN ('dir "%pfad%" /b /A-D ^| find /c /v ""') DO @(  
	if %%k GTR 100 (
            echo Mehr als 100
            call xyz.bat
        ) else (
            exit
        )
)


Grüße Uwe
MartinBinder
MartinBinder 05.09.2013 um 22:27:20 Uhr
Goto Top
Anmerkung:

EXIT in nem Batch bewirkt was? Genau - cmd.exe wird beendet. Damit zwar auch der Batch selbst (gewollt), aber auch ein ggf. aufrufender Batch sowie die Commandline, in der ich den Batch ausführe (meist dann ungewollt).

Besser: GOTO :EOF

@uwe: Du hast echt Geduld face-smile Und dass find "" geht, habe ich auch noch nicht ausprobiert - ist aber ne gute Idee. Bisher hab ich immer ein abstruses Zeichen genommen, z.B. "?".

mfg Martin
ghostX
ghostX 06.09.2013 um 16:30:02 Uhr
Goto Top
Vielen Dank hat funktioniert!
pieh-ejdsch
pieh-ejdsch 06.09.2013 aktualisiert um 20:43:36 Uhr
Goto Top
moin,

wenn auch schon abgehakt kann das lange Durchsuchen nach Dateien bei erreichen der 100 abgebrochen werden.
Der dir geht aber erst durchs gesamte Verzeichnis auch wenn schon lange das gefundene dasteht:
dir /s /b C:\ 2>nul |find /n /v "" |findstr /bc:[100] &&echo Programm kann gestartet werden.||echo Nicht genuegend Dateien.  
Bei mehreren 100000 Dateien würde dies schon etwas dauern.
Die Einfache Forschleife bietet sich dafür in einer Unteroutine an um bei Erfolg sofort aufzuhören.
@echo off
setlocal
set        "Quelle=D:"  
set "FilterDateien=*.txt"  

set /a         Min=100
set /a   Rekursive=1
set /a      Ordner=0

if    "%ordner%" equ "1" (set D=/d &set "Suche=Ordner") else set "D=" &set "Suche=Dateien"  

call :test || Echo mindestes %min% %Filterdateien% %Suche% -- Programm x wird gestartet
pause
exit /b

:test
for %%a in (%Quelle%\) do set "Quelle=%%~fa"  
if "%Rekursive%" equ "1" (set R=/r "%Quelle%" &set "Quelle=") else set "R="  
set /a lfd=0
for %D% %R% %%i in ( "%quelle%%FilterDateien%" ) do @set /a lfd+=1,T=1/(min-lfd) 2>nul ||exit /b 1  
Echo Es sind nur %lfd% %Filterdateien% %Suche%.
exit /b 0

Gruß Phil