bingoblin
Goto Top

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

Content-Key: 545740

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

Printed on: April 25, 2024 at 12:04 o'clock

Mitglied: 142232
Solution 142232 Feb 10, 2020 updated at 10:21:12 (UTC)
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.
Member: Bingoblin
Bingoblin Feb 11, 2020 at 11:44:09 (UTC)
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.
Member: Bingoblin
Bingoblin Feb 11, 2020 at 13:46:40 (UTC)
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.
Mitglied: 142970
142970 Feb 11, 2020 updated at 13:59:22 (UTC)
Goto Top
RTFM!
Get-ChildItem 'D:\Ordner' -Recurse -Directory | ?{($_.GetFiles('*',1) | measure Length -Sum).Sum -gt 1kb} | select -ExpandProperty Fullname