bingoblin

Kombination for-Schleifen und if-Anweisung

Moin,

ich wollte die Ordnergrößen meiner Struktur feststellen und ab einer Bestimmten Größe sollten die Ordner ausgegeben werden.


Mein Code sieht wie folgt aus:

for /f "delims=" %%f in ('dir /ad /b /s "DATEIPFAD"') do (  
	set datei="%%~f"  

	for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find "Datei(en)" ^|find "Bytes"') do set dateigroesse=%%k  

	if %dateigroesse% GEQ 1000 echo %datei%	
)
pause

Sobald ich die Datei ausführe, schließt es sich direkt wieder. Ich finde meinen Fehler nicht. Gibt es vielleicht durch die Verschachtelung der for-schleifen und der if-Anweisung ein Problem?

Die Schleifen habe ich schon wie folgt getestet:
for /f "delims=" %%f in ('dir /ad /b /s "DATEIPFAD"') do (  
	set datei="%%~f"  

	for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find "Datei(en)" ^|find "Bytes"') do set dateigroesse=%%k  
)

Funktioniert und
for /f "tokens=1-3" %%i in ('dir DATEIPFAD /-C /S ^|find "Datei(en)" ^|find "Bytes"') do set dateigroesse=%%k  

if %dateigroesse% GEQ 1000 echo DATEIPFAD
funktioniert auch.

Vielen Dank im Voraus

Mit freundlichen Grüßen
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 545740

Url: https://administrator.de/forum/kombination-for-schleifen-und-if-anweisung-545740.html

Ausgedruckt am: 27.04.2025 um 11:04 Uhr

142232
Lösung 142232 10.02.2020 aktualisiert um 11:21:12 Uhr
Goto Top
Belese dich mal zu delayed expansion, dann verstehst du das das setzen von Variablen innerhalb von Klammern und abfragen mit %variable% nicht funktioniert, sonder mit !Variable!.

Sowas fackelt man aber heutzutage gleich mit der Powershell ab, schon weil Batch mit größeren Zahlen nicht mehr umgehen kann ...
Get-ChildItem 'D:\Ordner' -Recurse -Directory | ?{($_.GetFiles() | measure Length -Sum).Sum -gt 1kb} | select -ExpandProperty Fullname   
Kannst du übrigens auch in einer Batch benutzen
@echo off
powershell -EP Bypass -NoP -C "Get-ChildItem 'D:\Ordner' -Recurse -Directory | ?{($_.GetFiles() | measure Length -Sum).Sum -gt 1kb} | select -ExpandProperty Fullname"  

Case done, Haken dran und fertsch.
Bingoblin
Bingoblin 11.02.2020 um 12:44:09 Uhr
Goto Top
Muss ich die Ausgabe des PowerShell Befehls in eine Textdatei schreiben und dann wieder einlsen oder kann ich die Ausgegebenen Pfade auch direkt mit einer FOR-Schleife durchlaufen?

 for /f "tokens=*" %%j in ('powershell -EP Bypass -NoP -C "Get-ChildItem !datei! -Recurse -Directory | ?{($_.GetFiles() | measure Length -Sum).Sum -le 1kb} | select -ExpandProperty') do ...  


So wäre mein Ansatz, funktioniert aber nicht.
Bingoblin
Bingoblin 11.02.2020 um 14:46:40 Uhr
Goto Top
Des Weiteren ist mir aufgefallen das bei dem PS-Befahl nur Ordner aufgelistet werden, welche direkt eine Datei enthält. Wenn ein Ordner nur Unterordner erhält und einer dieser Unterordner eine Datei enthält muss dieser Ordner auch ausgegeben werden.
142970
142970 11.02.2020 aktualisiert um 14:59:22 Uhr
Goto Top
RTFM!
Get-ChildItem 'D:\Ordner' -Recurse -Directory | ?{($_.GetFiles('*',1) | measure Length -Sum).Sum -gt 1kb} | select -ExpandProperty Fullname