Batch Datei die Ordnergröße ermittelt?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

kein Akt

@echo off

::filtere aus der normelen anzeige von DIR die  zeile,welche...
::  mit mindestens einem Leerzeichen  beginnt
::  gefolgt von  mindestens einer Ziffer
::  gefolgt  von belibigen Zeichen
::  Bytes  am Ende  der Zeile
::...es  gibt für   jeden  ordner  nur  eine  solche  Zeile:"              0 Datei(en),    0 Bytes"
::...bei recursiver (/s)  Auflistung  hat  die letzte so gefilterte Zeile den gesamtwert
dir /s "C:\Users\Erzesel Secure\Testfolder"|findstr /irc:"^  *[0-9][0-9]*.*Bytes$"


::die  zuweisung an Variablen ist kein  Akt...,  der  letzte  Wert  bleibt in der Variable
set "Folder=C:\Users\Erzesel Secure\Testfolder"
for /f "tokens=1,3" %%a  in ('dir /s "%Folder%" ^|findstr /irc:"^  *[0-9][0-9]*.*Bytes$"') do (
    set "FileCount=%%a"
    set "FolderSize=%%b"
)
echo %FileCount% Dateien  im Verzeichnis "%Folder%"
echo gesamt %FolderSize:.=% Bytes

pause

allerdings wird es Bei eventuell folgenden Berechnungen Probleme geben, wenn eine Zahl 2147483647 überschreitet...

Lege Batch zu den Akten und verwende Powershell.

(gci "C:\Users\Erzesel Secure\Testfolder"  -r -ea sil | measure Length -Sum).Sum
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Dieser Befehl:

dir /s/a "path/to/directory"

listet die enthaltenen Dateien und schlussendlich auch die verbrauchte Speichergröße auf.

Bulli97 
Fragesteller
 10.01.2024, 11:49

Muss dazu sagen ich würde mir gerne die Größe des Ordners in eine Variable packen

0
regex9  10.01.2024, 12:17
@Bulli97

Du könntest den Wert aus der Ausgabe herausparsen (siehe hier).

Ich persönlich würde statt Batch eher PowerShell verwenden.

$folder = "path/to/directory"
$size = (Get-ChildItem -Path $folder -File -Recurse | Measure-Object -Property Length -Sum).Sum
Write-Output $size

# in MB
Write-Output ($size / 1MB)
0