buxi
Goto Top

Script Anzeige von mehreren Verzeichnisgrössen mit Auswertung

Script soll Grösse von mehr. Verz. anz. und bei Überschreitung einer def. eine Aktion ausf.

Hallo und ein gutes neues Jahr :- );

Folgendes hätte ich heute als Frage anzubieten:
Es soll auf einem XP-Rechner die Grösse von mehreren Verzeichnissen
ermittelt werden ( z. B. C:\data und C: Programme\test etc. ).
Dies per Script.
Die Grössen sollen dann addiert werden und einen bestimmten Wert
( z. B. 3,6 GB ) nicht überschreiten.
Falls dies Grössenüberschreitung geschieht soll eine Meldung erfolgen
( geht das per Kommandozeile oder auch per normalen WSH-Script vbs-File ?)
und eine nachfolgende Batch nicht ausgeführt werden.
Es wird dieser Script benötigt,
weil auf ein ext. Sicherungsmedium (USB-Stick max. 4 GB)
Dateien per MS-robocop* zu
kopieren sind ( die Batch dafür ist schon fertig und würde
die Dateien aus den o. g. Verzeichnissen kopieren ).
Dafür darf die Menge der zu sichernden Dateien nicht mehr als
3,6 GB sein und man braucht vorher eine Ermittlung.
Hat jemand eine einigermassen simple Lösung die auch
im Script mit Anmerkungen zum Verständnis ist ?

Many thanks in advance

Buxi

Content-ID: 78953

Url: https://administrator.de/forum/script-anzeige-von-mehreren-verzeichnisgroessen-mit-auswertung-78953.html

Ausgedruckt am: 29.12.2024 um 10:12 Uhr

miniversum
miniversum 23.01.2008 um 17:43:05 Uhr
Goto Top
Das wäre dann sowas wie das hier: batch ordnergröße Berechnen

in einer For-Schleife.
gemini
gemini 23.01.2008 um 17:43:37 Uhr
Goto Top
Hallo buxi,

hier ein kleines Script das von zwei Verzeichnissen die Größen addiert und anhand des ermittelten Wertes das weitere Vorgehen entscheidet.
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set WshShell = WScript.CreateObject("WScript.Shell")  

' Die Befehlszeile für Robocopy inkl. Schalter (/JOB, /LOG etc.) (Anpassen!)  
strCmd = "c:\...\Robocopy.exe ......"  

' Das erste Verzeichnis laden... (Pfad anpassen!)  
Set objFolder = objFSO.GetFolder("C:\Programme\Adobe")  
' ... dessen Größe in Bytes in eine Variable schreiben  
Fld1 = objFolder.Size
' Dito für das zweite Verzeichnis (Pfad anpassen!)  
Set objFolder = objFSO.GetFolder("C:\Programme\ASUS")  
Fld2 = objFolder.Size

' In GB umrechnen und entscheiden, ob Robocopy gestartet werden soll  
If (Fld1 + Fld2)/1073741824 < 3.6 Then
	' Der Aufruf von Robocopy  
	WshShell.Run strCmd
	' Damit der Benutzer erfährt wenn Robocopy fertig ist...  
	MsgBox "Fertig!"  
Else
	' ... oder warum nicht kopiert werden kann  
	MsgBox "Kopiervorgang konnte nicht gestartet werden! " & vbCrLf & "Ordnergröße: " & (Fld1 + Fld2)/1073741824 & " GB"  
End If
HTH,
gemini
Biber
Biber 23.01.2008 um 18:22:13 Uhr
Goto Top
Moin buxi,

wobei ich trotz meiner eigenen Vorliebe zum Selber-Zusammenschroten fairerweise darauf hinweisen möchte, dass manche Räder schon erfunden worden sind.
Und zu allem Überfluss sind die auch sauschnell manchmal.

Es gibt tonnenweise Freeware-Utilities namens "DirUse.exe", "DU.exe", also von Unix portierte liebgewonnene Helferchen, die Verzeichnisgrößen aufsummieren.

Deren Syntax ist in der Regel
Diruse [-optionen] [Liste von Verzeichnissen]

Wenn davon das Wesentliche rausgefiltert wird, ergibt sich innerhalb von kurzer Zeit so etwas
>diruse -s "y:\Eigene Dateien" d:\temp|find /i "  TOTAL"  
    618280875   4982  TOTAL
... also eine einzige Zeile/eine einzige Zahl, die verglichen werden muss.
Weswegen ich übrigens eigentlich poste: Diese Floskel "Many thanks in advance" erkenne ich auch auf ausländisch wieder... bitte gib lieber (wie gewohnt) Rückmeldung statt vorauseilend zu danken.

Siehe dazu auch das Negativbeispiel oben (miniversums Link).

Grüße
Biber
buxi
buxi 24.01.2008 um 14:05:56 Uhr
Goto Top
Hallo zusammen,

danke für die vielen Anregungen und Hinweise.
Ich poste falls ich die eine oder andere
Verständnisfrage habe.
Die kommen bestimmt ....

Gruß
Buxi