Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Batch & Shell

GELÖST

VB Script - belegten Speicherplatz eines Ordners anzeigen

Mitglied: 15858

15858 (Level 1)

08.11.2006, aktualisiert 09.11.2006, 7187 Aufrufe, 22 Kommentare

Hi,

ich möchte per VB Script oder in irgend einer anderen Scriptsprache mir den belegten Speicherplatz von einen Ordner anzeigen lassen. Das ganze soll in einer Schleife ablaufen, und die Variablen dafür (UNC-Pfade) soll er sich aus einer extra Text-Datei holen. Ist so etwas möglich? Ich suche jetzt schon den ganze Tag im Internet danach und werde einfach nicht fündig.

mfg 0per8or
Mitglied: Biber
08.11.2006 um 15:17 Uhr
Rückfrage:
Den "belegten Speicherplatz" oder "die Summe der einzelnen Dateigrößen in diesem Ordner"?

Gruß
Biber
Bitte warten ..
Mitglied: bastla
08.11.2006 um 15:22 Uhr
Hallo Oper8or!

Weitere Rückfrage: Obiges bezogen auf den Ordner mit/ohne Unterordner?

Grüße
bastla
Bitte warten ..
Mitglied: 15858
08.11.2006 um 15:47 Uhr
Es soll die Größe in Megabyte oder Gigabyte des kompletten Ordnerinhalts oder Freigabe, inklusive aller Ordner und Dateien angezeigt und in eine txt-Datei geschrieben werden.

mfg 0per8or
Bitte warten ..
Mitglied: bastla
08.11.2006 um 16:51 Uhr
Hallo Oper8or!

Hatte nur für folgendes Zeit:

01.
@echo off & Setlocal 
02.
Set Erg="D:\Ergebnis.txt" 
03.
If Exist %Erg% del %Erg% 
04.
for /f %%f in (D:\liste.txt) do call :GetDirSize "%%f" 
05.
goto :eof 
06.
:GetDirSize 
07.
for /f "tokens=2,3*" %%i in ('dir %1 /a /s /-c ^| findstr "Datei(en)"') do set Size=%%j 
08.
echo %1; %Size% >> %Erg% 
09.
goto :eof
Noch zu verbessern: Formatierung des Ergebnisses (derzeit Anzeige in Bytes), Übergabe von Listen- und Ergebnisdatei beim Batchaufruf

HTH
bastla
Bitte warten ..
Mitglied: Biber
08.11.2006 um 17:02 Uhr
...und eine Forumssuche nach "DirSize" liefert immerhin 8 Fundstellen für Batch/Skript-Lösungen.
Aber es müssten auch Ansätze mit VB-Skript (über das FileSystemObject) hier vorliegen.

Und der Vollständigkeit halber auch noch mal der Hinweis auf vorhandene DirUse/DiskUsage-Utilities sowohl von M$ wie auch von Könnern (Unix-du-Derivate).

Grüße
Biber
Bitte warten ..
Mitglied: bastla
08.11.2006 um 17:17 Uhr
@Biber

Du bist aber streng heute ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
08.11.2006 um 17:40 Uhr
@bastla
Du bist aber streng heute ...

Ja, hast Recht... ist auch mein dritter gefühlter Montag in dieser Woche... *grrrmmmbl*

@15858
Sorry für den rüden Ton - Du konntest wirklich nichts dafür.

Grüße
Biber
Bitte warten ..
Mitglied: 15858
08.11.2006 um 17:51 Uhr
@bastla
Danke für den Code. Funktioniert super... ich versteh zwar noch nicht alles was da drin steht, aber das bekomm ich schon noch raus. =)

@Biber
Kein Problem!

mfg 0per8or
Bitte warten ..
Mitglied: bastla
08.11.2006 um 17:57 Uhr
Hallo Oper8or!

Als Entschädigung noch die VBS-Variante:
01.
If WScript.Arguments.Count = 2 Then 
02.
	sFolderList = WScript.Arguments(0) 
03.
	sResults = WScript.Arguments(1) 
04.
Else 
05.
	WScript.Echo "Usage: " & WScript.ScriptFullName & " Listendatei Ergebnisdatei" 
06.
	WScript.Quit(1) 
07.
End If 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
Set oResultsFile = fso.OpenTextFile(sResults, 2, True) 
11.
Set oListFile = fso.OpenTextFile(sFolderList, 1) 
12.
 
13.
Do While Not oListFile.AtEndOfStream 
14.
	sDirPath = oListFile.ReadLine 
15.
	If fso.FolderExists(sDirPath) Then 
16.
		Set oFolder = fso.GetFolder(sDirPath) 
17.
		oResultsFile.WriteLine Chr(34) & sDirPath & Chr(34) & ";" & FormatNumber(oFolder.Size /1024 / 1024, 3,,,False) 
18.
	Else 
19.
		oResultsFile.WriteLine Chr(34) & sDirPath & Chr(34) & ";" & Chr(34) & "nicht gefunden" & Chr(34) 
20.
	End If 
21.
Loop 
22.
 
23.
oResultsFile.Close 
24.
oListFile.Close
Hat leider derzeit kein eingeschränktes Errorhandling und bricht daher zB bei falschen Ordnernamen in der Liste ab - vielleicht komm ich noch dazu, das nachzureichen. Dafür gibt's aber die Ausgabe in MiB.

@Biber
Wann hat denn diese furchtbare Woche angefangen - doch wohl hoffentlich nicht am *TrautSichNichtMontagHinschreiben*

Grüße
bastla

[Edit] Irgendwann mach ich auch die Zahlenformatiererei in VBS beim ersten Mal richtig. [/Edit]
Bitte warten ..
Mitglied: 15858
08.11.2006 um 18:31 Uhr
Hi bastla!

Das VB Script gefällt mir noch besser. Das ist echt klasse! Vielen Dank!

mfg 0per8or
Bitte warten ..
Mitglied: bastla
08.11.2006 um 18:49 Uhr
Hallo Oper8or!

Zumindest das Vorhandensein der Ordner wird im Script jetzt vorweg überprüft - habe oben zur vorläufig endgültigen Version editiert.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
08.11.2006 um 19:02 Uhr
Hihi...grad hatte ich angefangen mit meinem Kommentar..dass vielleicht noch eine
"If fso.FolderExists(sDirPath)"-Verzweigung reinkönnte oder wenigstens ein "On Error resume next",
aber da warst Du wieder schneller, bastla...

Schönen Abend
Biber
Bitte warten ..
Mitglied: bastla
08.11.2006 um 19:12 Uhr
@Biber

"On Error Resume Next" mag ich nicht so besonders, weil ich trotzdem Fehler (zumindest an neuralgischen Stellen) abfangen müsste, aber ein "If Not Err.Number" nicht so tut, wie ich das gerne hätte.

Grüße
bastla
Bitte warten ..
Mitglied: 15858
09.11.2006 um 14:16 Uhr
Hi,

es funktioniert alles soweit super. Bei manchen Verzeichnissen bekomme ich allerdings die Fehlermeldung "Erlaubnis verweigert" und das Script bricht ab. Ich hab mir jetzt schon alle Berechtigungen angesehen und nach ein paar Einstellungen funktioniert es dann auch.

Gibt es eine Möglichkeit, eine Fehlermeldung mit in die Datei auszugeben ohne das das Script abbricht?

mfg 0per8or
Bitte warten ..
Mitglied: Biber
09.11.2006 um 14:41 Uhr
Moin 0per8or,

nun hast Du grad wieder eine Stelle angesprochen, wo wir die Diskussion von gestern weiterführen können - die so-oder-so schrottige Fehlerbehandlung von VBSkript.

Mit "On Error Resume Next" isses Quark -seh ich auch so- und die Fehlernummern (Err.Number) nutzen nur dann, wenn man/frau denn weiß, was für konkrete Fehler denn in der jeweiligen Situation auftreten/kommen können.

Und das führt - ja besonders bei M$ selbst- dazu, dass Du dann irgendeinen Fehler "0008AXB9867" oder so ähnlich in einer Messagebox auf dem Bildschirm Deiner Tante Frieda hast.
Die wahrscheinlich davon sehr beeindruckt sein wird, aber es genauwenig versteht wie ich.

Von daher kannst Du eigentlich so wie gestern beim "if not oFS.FolderExists(folder)" vorher abprüfen, ob denn alles da ist, was die nachfolgenden Code-Zeilen brauchen.

Bei Lese/List-Rechten wäre eine Annäherung über folgende Skizze denkbar:
01.
... 
02.
Function HabIchLeseRechte( strOrdner) 
03.
 ' Return: TRUE,/WAHR, wenn wenigstens Lese-Rechte auf alle Dateien da sind 
04.
 ' Pflichtparameter strOrdner: Pfad, auch Netzwerk oder UNC Pfad 
05.
 On Error Resume Next 
06.
 Dim fso, f, fc, f1 
07.
 HabIchLeseRechte = False 
08.
 Set fso = CreateObject("Scripting.FileSystemObject") 
09.
 Set f = fso.GetFolder(strOrdner) 
10.
 Set fc = f.Files 
11.
 For Each f1 In fc 
12.
  If Err.Number <> 0 Then Exit For 
13.
  HabIchLeseRechte = True 
14.
  Exit Function 
15.
 Next 
16.
 Err.Clear 
17.
 On Error GoTo 0 
18.
End Function
Diese Mini-Function müsstest Du noch in bastla's Schnipsel einbauen als Function
und VOR der Zeile "Set oFolder = fso.GetFolder(sDirPath)" aufrufen.

01.
.. 
02.
If HabIchLeseRechte(sDirPath) then 
03.
     Set oFolder = fso.GetFolder(sDirPath) 
04.
      '... wie oben 
05.
Else 
06.
     oResultsFile.WriteLine Chr(34) & sDirPath & Chr(34) & ";" & Chr(34) & " keine Rechte" & Chr(34) 
07.
 
08.
End if 
09.
....
[ungetestete Skizze / unausgelebte Phantasien]

Gruß
Biber
Bitte warten ..
Mitglied: 15858
09.11.2006 um 15:45 Uhr
Hab mir das jetzt eingebaut und ein bisschen angepasst.

Jetzt bekomme ich allerdings bei fast allen Verzeichnissen die Antwort "keine Rechte" in der Ergebnisdatei. Da war es vorher besser.

Ich werde weiter ausprobieren.

mfg 0per8or
Bitte warten ..
Mitglied: Biber
09.11.2006 um 16:08 Uhr
Sorry... hatte oben noch einen Fehler drin...Funktionsnamen nicht angepasst.
Sorry.
Probier noch mal bitte.

Biber
Bitte warten ..
Mitglied: bastla
09.11.2006 um 16:21 Uhr
@Biber

Nach einigen Tests scheint ziemlich sicher, dass Rechte auf die einzelnen Dateien eines Ordners überhaupt nicht nötig sind, um sogar deren Größe auszulesen (hab es sogar mit Verweigerung des Vollzugriffs auf eine einzelne Datei geschafft, deren Größe anzuzeigen - und nein, es hat nicht der Besitzer der Datei das Script ausgeführt).

Voraussetzung, um die Größe eines Ordners lesen zu können, ist das Recht "Ordnerinhalt auflisten" - allerdings muss dieser Zugriff für alle Unterordner gewährleistet sein, sodass die Function wohl rekursiv anzulegen wäre.
Im Übrigen ist mir Dein Ansatz nicht ganz klar, da ja eigentlich nur die erste betrachtete Datei entscheiden würde - Verlassen der Schleife (mit gesetztem False) bei Fehler bzw Verlassen der Function (mit gesetztem True), wenn kein Fehler?

Mein Ansatz dazu (aber anscheinen ohnehin bereits irrelevant, wenn es nicht auf die Dateien ankommt) wäre etwa so:
01.
Function HabIchLeseRechte(strOrdner) 
02.
 ' Return: TRUE,/WAHR, wenn wenigstens Lese-Rechte auf alle Dateien da sind 
03.
 ' Pfad, auch Netzwerk oder UNC Pfad 
04.
 On Error Resume Next 
05.
 Dim fso, f, fc, f1 
06.
 HasRights = True 
07.
 Set fso = CreateObject("Scripting.FileSystemObject") 
08.
 Set f = fso.GetFolder(strOrdner) 
09.
 Set fc = f.Files 
10.
 'Falls keine Rechte auf den Ordner, bereits hier ein Error 
11.
 If Err.Number = 0 Then 
12.
  For Each f1 In fc 
13.
  Dummy = f1.Size 
14.
  If Err.Number <> 0 Then  
15.
    HasRights=False 
16.
	Exit For 
17.
  End If 
18.
  Next 
19.
 Else 
20.
  HasRights=False 
21.
 End If 
22.
 HabIchLeseRechte = HasRights 
23.
End Function
Grüße
bastla
Bitte warten ..
Mitglied: Biber
09.11.2006 um 16:41 Uhr
@bastla
nicht ganz klar, da ja eigentlich nur die erste betrachtete Datei entscheiden würde
Da hast Du Recht... war auch nur schnell dahingeschlampert...

Und wenn sich das ganze Prüfen reduzieren lässt auf "Recht zum Ordnerinhalt auflisten", dann umso besser.

Wiederum andererseits... im Prinzip kann ich es doch dann auch beschränken auf
"wenn Folder existiert [oFS.FolderExist( sDirname)], ABER ein oFS.GetFolder(sDirname) in die Grütze geht..".

---->jeder Fehler ist dann ein Rechteproblem.
Für mich ein weiterer Beleg für mein "M$-Errorhandling taugt nich' für 5 Cent" von oben.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
09.11.2006 um 16:54 Uhr
@Biber

Wiederum andererseits... im Prinzip kann ich es doch dann auch beschränken auf "wenn Folder existiert [oFS.FolderExist( sDirname)], ABER ein oFS.GetFolder(sDirname) in die Grütze geht.."
Leider nein hinsichtlich der Unterordner: Wenn die Rechte auf den enthaltenden Ordner reichen, klappt das "GetFolder"; den Fehler erhält man erst beim Versuch, die Größe auszulesen (da jetzt die Unterordner einbezogen werden).

Für mich ein weiterer Beleg für mein "M$-Errorhandling taugt nich' für 5 Cent" von oben.
Kein Einspruch.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
09.11.2006 um 17:12 Uhr
Na, bastla,

nicht, dass wir noch von M$'s Anwälten einen an den Hals kriegen jetzt...*ggg

Aber, @15858, konnten wir Dich denn auf den richtigen Weg bringen jetzt?
Weil... verfeinern lässt es sich auch endlos weiter.
Wir könnten noch die Fehler abfangen, dass gerade die Netzwerkverbindung abreißt oder ein Lesefehler wegen maroden Sektoren dazwischenkommt oder beim Anfassen einer bestimmten Datei der Virenwächter hochpoppt und sagt. "die sperr ich mal besser"...

Aber so als Skizzen sind die Ansätze doch schon klar, denke ich, und eigentlich die Frage beantwortet, oder?

Gruß
Biber
Bitte warten ..
Mitglied: 15858
09.11.2006 um 18:06 Uhr
Ja. Dieses Thema können wir jetzt als beantwortet sehen. Ihr habt mir auf jeden Fall ein großes Stück weiter geholfen. Danke nochmal.

mfg 0per8or
Bitte warten ..
Ähnliche Inhalte
Exchange Server
Wie belegt sich der Speicherplatz auf einem Exchange 2010 Server
Frage von StefanKittelExchange Server5 Kommentare

Hallo, ich habe hier ein Exchange 2010 in einem SBS 2011 bei einer kleinen Firma mit 5 Postfächern. Davon ...

VB for Applications
VB-Script in VB-Script starten und Parameter übergeben
gelöst Frage von denkisVB for Applications7 Kommentare

Hallo liebe Scriptgemeinde, ich muss mehrere Rechner für den Übergang in eine neue Domäne vorbereiten. Dafür sind drei wesentliche ...

Batch & Shell
Belegter sowie freier Speicherplatz ermitteln und vergleichen
gelöst Frage von m.fesslerBatch & Shell13 Kommentare

Hallo zusammen, ich möchte mittels einer Batch den belegten Speicherplatz auf Laufwerk A sowie den freien Speicherplatz auf Laufwerk ...

Batch & Shell
Probleme bei der Ausführung eines VB-Scriptes
Frage von AuricGoldfingerBatch & Shell1 Kommentar

Hallo zusammen, ich habe folgendes Script geschrieben: Leider bekomme ich bei der Ausführung den Fehler Was mache ich falsch?? ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...