joes1609
Goto Top

Verzeichnisgröße auslesen, dabei Ordner exkludieren.

Hallo,

ich habe folgendes Problem:

Ich habe ein Batch, welches mir die Größe eines bestimmten Verzeichnisses ausgibt.
@echo off
set "Ordner=C:\"  
set "temp=%temp%\temp.vbs  

mode con lines=6 cols=50
echo WScript.Echo Int(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)).Size/1024/1024+.99)>%temp%  
for /f %%i in ('cscript //nologo %temp% "%Ordner%"') do set Gr=%%i  
echo.
echo Im Home-Verzeichnis %Ordner% sind %Gr% MB belegt.
echo.
echo Bitte beliebige Taste druecken zum Beenden.
echo.
del %temp%
pause > nul

Nun möcht ich aber ggf., das ein oder mehrere Ordner diese Verzeichnisses bei der Berechnung ausgeschlossen werden soll(en).
Hat jemand einen Tipp?

Vielen Dank im Voraus

Jörg

Content-Key: 230395

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: colinardo
Solution colinardo Feb 19, 2014 updated at 16:07:02 (UTC)
Goto Top
Hallo Jörg, Willkommen im Forum!
Folgenden VBS-Code kannst du dir ja in die Batch umsetzen:
(die ausgeschlossene Ordner stehen in Zeile 2 in einem komma getrennten Array)
strOrdner = WScript.Arguments(0)
arrOrdnerExclude = Array(strOrdner & "\diverses", strOrdner & "\NocheinOrdnerdernichsoll")  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
allSize = fso.GetFolder(strOrdner).Size
excludedSize = 0
For i = 0 To UBound(arrOrdnerExclude)
	excludedSize = excludedSize + fso.GetFolder(arrOrdnerExclude(i)).Size	
Next
totalsize = Round((allSize - excludedSize)/(1024*1024),2)
WScript.Echo totalsize
Der Code nimmt einfach erst die Gesamtgröße aller Ordner und dann die Größe der ausgeschlossenen Ordner und zieht diese dann von der Gesamtgröße ab.

Noch als Hinweis, deine Batch verändert den %TEMP% Pfad von Windows in der Batch, hier solltest du eine andere Variable verwenden als %TEMP%.

Nachtrag: Die VBS in Batch umgesetzt (ausgeschlossene Ordner stehen in Zeile 8):
@echo off & setlocal
set "Ordner=C:\Ordner"  
mode con lines=6 cols=50

set "tempfile=%temp%\tempfile.vbs"  
del /q "%tempfile%" >nul  
echo strOrdner = wscript.Arguments(0)>>"%tempfile%"  
echo arrOrdnerExclude ^= Array(strOrdner ^& "\diverses", strOrdner ^& "\diesUndDas")>>"%tempfile%"  
echo Set fso ^= WScript.CreateObject("Scripting.Filesystemobject")>>"%tempfile%"  
echo allSize ^= fso.GetFolder(strOrdner).Size>>"%tempfile%"  
echo excludedSize ^= ^0>>"%tempfile%"  
echo For i ^= 0 To UBound(arrOrdnerExclude)>>"%tempfile%"  
echo 	excludedSize ^= excludedSize + fso.GetFolder(arrOrdnerExclude(i)).Size	>>"%tempfile%"  
echo Next>>"%tempfile%"  
echo totalsize ^= Round((allSize - excludedSize)/(1024*1024),2)>>"%tempfile%"  
echo WScript.Echo totalsize>>"%tempfile%"  

for /f "delims=" %%i in ('cscript //NOLOGO "%tempfile%" "%Ordner%"') do set Gr=%%i  
echo.
echo Im Home-Verzeichnis %Ordner% sind %Gr% MB belegt.
echo.
echo Bitte beliebige Taste druecken zum Beenden.
echo.
del  "%tempfile%"  
pause > nul
ansonsten lässt sich dich Größe auch ohne VBS ermitteln:
@echo off & setlocal enabledelayedexpansion
set "Ordner=C:\temp"  
set /a totalsize=0

for /r "%Ordner%" %%a in (*.*) do @(  
  echo %%a | findstr /BVI "%ordner%\diverses" >nul && set /a totalsize +=%%~za  
)
set /a totalsize=%totalsize%/(1024*1024)
echo %totalsize%
Grüße Uwe
Member: joes1609
joes1609 Feb 19, 2014 at 15:43:01 (UTC)
Goto Top
Hallo Uwe,

vielen Dank für die Hilfe, da ich aber nicht der große Scripter bin, noch eine Frage.

Wie muß ich deinen Code in meinen einbauen, damit das funktioniert?

Gruß Jörg
Member: colinardo
colinardo Feb 19, 2014 updated at 15:45:56 (UTC)
Goto Top
Zitat von @joes1609:
Wie muß ich deinen Code in meinen einbauen, damit das funktioniert?
habe ich gerade oben nachgetragen
Member: joes1609
joes1609 Feb 19, 2014 at 16:08:46 (UTC)
Goto Top
Vielen Dank,

funktioniert genauso wie gewünscht.

Gruß Jörg