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-ID: 230395

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

Ausgedruckt am: 23.11.2024 um 18:11 Uhr

colinardo
Lösung colinardo 19.02.2014 aktualisiert um 17:07:02 Uhr
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
joes1609
joes1609 19.02.2014 um 16:43:01 Uhr
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
colinardo
colinardo 19.02.2014 aktualisiert um 16:45:56 Uhr
Goto Top
Zitat von @joes1609:
Wie muß ich deinen Code in meinen einbauen, damit das funktioniert?
habe ich gerade oben nachgetragen
joes1609
joes1609 19.02.2014 um 17:08:46 Uhr
Goto Top
Vielen Dank,

funktioniert genauso wie gewünscht.

Gruß Jörg