Batch Ordnergröße

  • Ersteller Ersteller regenwetter
  • Erstellt am Erstellt am
R

regenwetter

Gast
Hi,
ich will per Batch die Ordnergröße (mit Unterordner) ermitteln

Folgendes habe ich bereits
@echo off &setlocal
set datei_tmp="E:\"

pushd "%datei_tmp%"
FOR /F "tokens=3 delims= " %%i in ('dir /s /-c^|find "Datei(en)"') do set groesse=%%i
echo %groesse%
popd
PAUSE

Kann es sein, dass nicht alle Dateien berücksichtigt werden? (versteckte, ...)
Muss ich das mit dem Parameter /A machen?
Wie bekomme ich mehrere Argemente (HR, ...) hinein?

Danke:p
 
Schon wieder Batch?
Code:
@echo off
setlocal enabledelayedexpansion

set pfad=C:\abc
set size=0

for /f "tokens=3" %%a in ('dir "%pfad%" /S /A-D /-B /-C ^| findstr "Datei(en)"') do (
	set ts=%%a
	set /a ts=!ts!/1024/1024
	set /a size=!size!+!ts!
)

echo Size of %pfad% = %size% MB
Bringt dir nur nix, denn Zahlen verarbeiten kann die Konsole nur bis 32 Bit (ergo max. 1,99.. GB pro Verzeichnis), ergo ist die Liste je nach Größe der Dateien hinfällig.

PS: Nutz PowerShell.
 
Die batch ist nicht von mir, hab ich irgendwann gefunden, vielleicht hilft sie dir weiter.
Code:
@echo off
chcp 1252 >nul

@echo Bitte warten...
SET var=0
SET datei=Info.txt
SET "temp=temp.vbs"
IF EXIST %datei% DEL %datei%
IF EXIST %temp% DEL %temp%
IF EXIST TempList1.txt DEL TempList1.txt
IF EXIST TempList2.txt DEL TempList2.txt

DIR /b /AD >TempList1.txt
echo WScript.Echo Int(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)).Size/1024/1024+.99)>%temp%

FOR /f "delims=" %%i IN (TempList1.txt) DO CALL :sub "%%i"
FOR /f %%i IN ('cscript //nologo %temp% "%cd%"') DO SET Gr=%%i
@echo Update: %DATE%>> "%datei%"
@echo.>>"%datei%"
@echo *** Filme insgesamt (%Gr% MB) ***>> "%datei%"
DEL TempList1.txt
DEL TempList2.txt
DEL %temp%
chcp 850 >nul
GOTO :EOF

:sub
set Ordner=%~1
FOR /f %%i in ('cscript //nologo %temp% "%Ordner%"') DO SET Gr=%%i
FOR /f "tokens=1 delims= " %%i IN ('dir /AD %1 ^|find "Verzeichnis("') DO SET /a "Z=%%i-2"
SET /a var+=%z%

REM @echo • %~1 (%Gr% MB)>>"%datei%"
REM @echo ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ >>"%datei%"

@echo • %~1 -^<:[1 Dir / %Gr% MB]:^>->>"%datei%"
@echo ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ >>"%datei%" 

dir /b /AD %~dp0\%1>TempList2.txt
FOR /f "delims=" %%i IN (TempList2.txt) DO CALL :sub1 "%%i"
@echo. >>"%datei%"
@echo. >>"%datei%"
GOTO :EOF

:sub1
SET Ordner1=%~1
FOR /f %%i IN ('cscript //nologo %temp% "%Ordner%"\"%Ordner1%"') DO SET Gr=%%i
@echo %Ordner1% (%Gr% MB) >>"%datei%"
GOTO :EOF
 
ja schon wieder Batch ...
@Yuuri
bei dir kommt leider immer 0 raus.
kann ich auch nicht 2 Zahlen vergleichen wenn ein Ordner größer als 1,99GB ist?

@Entilzha
hm, mir würde es reichen, wenn ich die Gesamtgröße hätte.
Wie kann man das Skript dahingehend kürzen?
 
regenwetter schrieb:
kann ich auch nicht 2 Zahlen vergleichen wenn ein Ordner größer als 1,99GB ist?
Nein, Zahlen bis maximal 32 Bit Größe passen rein. Du hast also einen Wertebereich von -2147483648 (2^32/2 = -2 GiB) bis 2147483647 (2^32/2-1 = 1.999999999 GiB). Mehr gibts nicht in der Batch-Lösung.

Die Lösung von Entilzha ist eher suboptimal, denn er schreibt sich im Prinzip in der Batch ein VB-Script. Da kann ich genauso auf Hilfs-Tools ausweichen oder mir auch gleich ein PowerShell-Script basteln.
Code:
$total = 0
((gci "C:\sowieso" -Recurse -File) | % { $total += $_.Length / 1Gb })
echo $total
 
Zurück
Oben