schregi82
Goto Top

Ordnergröße protokollieren ?

hallo zusammen,
ich suche nach einem tool, batch od. ähnlichem um die größe eines ordners zu protokollieren.

Zum Beispiel:
\\ordner1\uordner1

die größe von uordner1 soll täglich um xx:xx Uhr protokolliert werden

ob das jetzt in einem txt od. sonstigem format passiert ist egal.

Content-Key: 69462

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

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

Member: TuXHunt3R
TuXHunt3R Sep 25, 2007 at 13:22:39 (UTC)
Goto Top
Für ganze Laufwerke könnte das ganze in Batchform so aussehen:

echo <Laufwerk> >> c:\logfile_ordnergroesse.txt
echo %date%,%time% >> c:\logfile_ordnergroesse.txt
dir <Laufwerk> | find /i "Bytes " >> c:\logfile_ordnergroesse.txt  
echo. >> c:\logfile_ordnergroesse


Somit gibts ein schönes Logfile. "<Laufwerk>" musst du natürlich durch den Laufwerksbuchstaben ersetzen.
Member: schregi82
schregi82 Sep 25, 2007 at 16:36:38 (UTC)
Goto Top
hallo tuxhunt3r,

danke schon mal für deine antwort. ich hab nur noch ein problem damit, und zwar das nur der freie Speicherplatz protokolliert wird, ich möchte ja den Platz den der Ordner im Beispiel unten (d:\downloads\) belegt.


d:\ 
25.09.2007,18:29:09,15 
              12 Verzeichnis(se), 15.620.931.584 Bytes frei 
 
d:\downloads\ 
25.09.2007,18:30:31,43 
               4 Verzeichnis(se), 15.620.931.584 Bytes frei


hintergrund der geschichte: ich möchte einen ordner in dem das backend zu einem auf access !! basierenden warenwirtschaftssystem liegt, etwas im auge behalten.
Member: TuXHunt3R
TuXHunt3R Sep 25, 2007 at 19:42:39 (UTC)
Goto Top
Hat dieser Ordner noch weitere Unterordner oder werden darin einfach nur Dateien abgelegt? Evt. könnte ich dir in der Powershell was basteln, wenn du mir etwas Zeit gibst....
Member: schregi82
schregi82 Sep 25, 2007 at 20:42:49 (UTC)
Goto Top
es sind im grossen und ganzen nur *.mdb-Dateien (ca. 15), es existieren schon auch andere ordner (z.b. backup, bilder, etc..) auf selber ebene, aber die sollten nach möglichkeit auch gar nicht erfasst werden.

\\ordner1\uordner1\beispiel.mbd
\\ordner1\uordner1\backup\ ..
\\ordner1\uordner1\images\ ..

etc ..

andernfalls hätte ich die genannten ordner in der hierarchie nach oben gesetzt.
(was momentan noch kein problem ist, weil das ganze erst am anfang steht)

mir geht es eigentlich nur um die grösse der *.mdb-files.
die sollte dann täglich in einem *.txt protokolliert werden bzw. besser um den jeweilgen Tageseintrag erweitert werden.

thx a lot
Member: TuXHunt3R
TuXHunt3R Sep 25, 2007 at 21:09:10 (UTC)
Goto Top
OK, bin dran.

Noch ein bisschen Geduld.......
Member: Biber
Biber Sep 25, 2007 at 21:42:39 (UTC)
Goto Top
Moin schregi82,

der Effekt, den Du beschreibst, kommt durch einen unabsichtlichen Flüchtigkeitsfehler TuXHunt3Rs.

Der "deutsche" DIR-Befehl bringt in der Anzeige als letztes zwei Zeilen mit dem Wort "Bytes".
Und der "Find"-Befehl mit dem versehentlichen Leerzeichen nach dem Wort "Bytes " liefert die falsche Zeile.

Demo am CMD-Prompt:
(=23:36:57  D:\temp=)
>dir test|find "Bytes"  
               9 Datei(en)      6.691.869 Bytes
              15 Verzeichnis(se), 53.704.204.288 Bytes frei

(=23:37:14  D:\temp=)
>dir test|find "Bytes "  
              15 Verzeichnis(se), 53.704.204.288 Bytes frei

(=23:37:19  D:\temp=)
>dir test|findstr "Bytes$"  
               9 Datei(en)      6.691.869 Bytes
Wie Du siehst, liefert Variante 2 (mit find "Bytes ") genau die für Dich uninteressante Zeile.
Variante 3 mit dem etwas pfiffigeren FindStr-Utility mit "Bytes$" [=dem Wort "Bytes" am Zeilenende] wäre für Deinen Zweck besser.

Ansonsten passt TuX'ens Strategie schon.

Grüße
Biber

P.S. Für eine programmtechnische Weiterverarbeitung wäre u.U. der DIR-Parameter "-C" nützlich.
Der lässt die Tausender-Trennpunkte weg.
>dir /-c test|findstr "Bytes$"  
               9 Datei(en)        6691869 Bytes
P.P.S. Wenn Du hier im Forum nach "DirSize" suchst, findest Du ein paar ähnliche Skriptchen und auch Verweise auf Utilities wie du.exe (DiskUsage), die etwas flinker sind.
Member: TuXHunt3R
TuXHunt3R Sep 25, 2007 at 22:29:12 (UTC)
Goto Top
Hallo schregi82

Hier der Code des Powershell-Scripts:

# ***********************************
# LogMDBSize.ps1
# -----------------
# Counts the sizes of all MDB-Files in the specified folder
# and write it into a specified logfile
#
# Language: PowerShell v1.0
# History:
# | TuXHunT3R - 25.09.2007 - New Script
# 
# ***********************************

# Konsole leeren
clear-host

# Variablen setzen (GroesseAllerDateien als Integer, da mit der Zahl gerechnet werden muss)
$ordner = "<Hier den entsprechenden Ordner eingeben>"  
$Logfile = "<Hier den Pfad zum Logfile einsetzen>"  
[System.Int32]$GroesseAllerMDBs = 0
[System.Int32]$GroesseAllerMDBsKB = 0
[System.Int32]$GroesseAllerMDBsMB = 0
$DatumUndZeit = get-date -format g


# Alle Dateigrössen ausgeben, rsp. in Textfile abfüllen
get-childitem $Ordner\*.mdb | foreach-object -process { $_.length } | out-file C:\windows\temp\dateigroessen.txt

# Alle Grössen zusammenzählen
get-content C:\windows\temp\dateigroessen.txt | foreach-object -process { $GroesseAllerMDBs = $GroesseAllerMDBs + $_ }

#Umrechnen
$GroesseAllerMDBsKB = $GroesseAllerMDBs / 1024
$GroesseAllerMDBsMB = $GroesseAllerMDBsKB / 1024


# Ins Logfile schreiben
$DatumUndZeit | out-file $Logfile -append
$Ordner | out-file $Logfile -append
$GroesseAllerMDBsMB | out-file $Logfile -append
"Groesse aller MDB-Files in diesem Ordner in Megabytes (gerundet)" | out-file $Logfile -append  
"----------------------------------------------------------------" | out-file $Logfile -append  

# Ausgabe
write-host "LogMDBSize.ps1"  
write-host "=============="  
write-host " "  
$Ordner
write-host "--------------"  
write-host "Die Groesse aller MDBs in diesem Ordner wurde geloggt! Logfile:"  
$Logfile
write-host " "  
write-host "Schoenen Tag noch!"  
write-host "Coded by TuXHunT3R"  
write-host " "  


# temporäres Logfile schrotten
get-childitem C:\windows\temp\*dateigroessen*.txt -recurse | remove-item

Die folgenden Zeilen musst du noch anpassen (die Hochkommas " stehen lassen!):

$ordner = "<Hier den entsprechenden Ordner eingeben>"  
$Logfile = "<Hier den Pfad zum Logfile einsetzen>"  

Die PowerShell gibts gratis bei Microsoft zum Download, bitte auf die richtige Sprachversion und auf das Betriebssystem achten! PowerShell-Scripts haben die Dateiendung *.ps1

Vor dem Ausführen des Scripts musst du folgende Zeile in der PowerShell eingeben, um Scripts zu erlauben:

set-executionpolicy unrestricted

PowerShell-Scripts können nicht durch Doppelklick ausgeführt werden. Du musst in der Konsole in den entsprechenden Ordner wechseln (mit "cd") und dort das Script folgendermassen starten:

.\scriptname

D.h. du musst einfach ein ".\" vornedran machen.


Beschäftige dich doch bei dieser Gelegenheit gleich ein wenig mit der PowerShell, das Teil rockt!


EDIT:
ACHTUNG!!!!
Das Script zählt nur die Grössen aller MDB-Files zusammen, die in dem angegebenen Ordner liegen! MDBs in weiteren Unterordnern werden nicht berücksichtigt!