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-Key: 78953

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

Printed on: April 25, 2024 at 03:04 o'clock

Member: miniversum
miniversum Jan 23, 2008 at 16:43:05 (UTC)
Goto Top
Das wäre dann sowas wie das hier: batch ordnergröße Berechnen

in einer For-Schleife.
Member: gemini
gemini Jan 23, 2008 at 16:43:37 (UTC)
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
Member: Biber
Biber Jan 23, 2008 at 17:22:13 (UTC)
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
Member: buxi
buxi Jan 24, 2008 at 13:05:56 (UTC)
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