Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Ordnergröße und Änderungsdatum auslesen mit WSH

Frage Entwicklung VB for Applications

Mitglied: m0nstar

m0nstar (Level 1) - Jetzt verbinden

19.07.2009, aktualisiert 18.10.2012, 14087 Aufrufe, 36 Kommentare

Hallo,

nachdem ich jetzt Blut geleckt habe an WSH, würde ich mir gerne ein kleines .vbs Programm coden was mir es ermöglicht, die Subfolders in einem bestimmten Ordner auszugeben und die dazugehörige Ordernergröße und das letzte Änderungsdatum. Würde gerne damit meine Eigenen Dateien auslesen, es sollen keine Dateien angezeigt werden nur die Ordner.

Weiß aber leider nicht wie ich das grade umsetzten soll, vllt kann mir ja einer von euch einen Tip geben wie ich das machen könnte. Ich weiß auch nicht wie man es ausgeben könnte, ob per txt oder als eine msgbox.

Würde mich sehr über eine hilfe freuen, hab auch schon gegoogelt aber wirklich fündig wurde ich leider nicht.

Gruß,

m0nstar
36 Antworten
Mitglied: bastla
19.07.2009 um 21:55 Uhr
Hallo m0nstar!
Ich weiß auch nicht wie man es ausgeben könnte, ob per txt oder als eine msgbox.
Was Du mit den Daten anfangen willst, solltest Du schon selbst wissen - davon hängt dann auch die Form der Ausgabe ab ...

Das Auslesen und Ausgeben könnte etwa so aussehen:
01.
Folder = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") 'Pfad für "Eigene Dateien" 
02.
 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
05.
    'Ordnergröße in Byte mit Tausendertrennzeichen schreiben und 
06.
    '  durch vorangestellte Leerzeichen auf eine Länge von 15 bringen ... 
07.
    SizeFormatted = Right(Space(15) & FormatNumber(SubFolder.Size, 0, True, False, True), 15) 
08.
    '... und zusammen mit Änderungsdatum und Ordnernamen ausgeben 
09.
    WScript.Echo SubFolder.DateLastModified, SizeFormatted, SubFolder.Name 
10.
Next
Wenn Du das Script von der Kommandozeile durch die Eingabe von
cscript //nologo "Scriptname.vbs"
startest, erfolgt die Ausgabe im CMD-Fenster; bei einem Start per Doppelklick wird für jeden Unterordner eine eigene MsgBox erzeugt (die Du jeweils wieder wegklicken musst - daher nicht empfehlenswert).

Grüße
bastla

[Edit] Mit "True" als 3. Parameter in der FormatNumber()-Funktion wird auch der Wert 0 ausgegeben [/Edit]
Bitte warten ..
Mitglied: m0nstar
20.07.2009 um 08:33 Uhr
dankeschön für deine schnelle Antwort, ich schau mir das heute nochmal an thx...vllt krieg ich es ja jetzt hin.
Bitte warten ..
Mitglied: m0nstar
20.07.2009 um 09:38 Uhr
Option Explicit

Dim Folder, fso

Folder = CreateObject("WScript.Shell").SpecialFolders("J:\") 'Pfad für "Eigene Dateien"

Set fso = CreateObject("Scripting.FileSystemObject")
For Each SubFolder In fso.GetFolder(Folder).SubFolders
'Ordnergröße in Byte mit Tausendertrennzeichen schreiben und
' durch vorangestellte Leerzeichen auf eine Länge von 15 bringen ...
SizeFormatted = Right(Space(15) & FormatNumber(SubFolder.Size, 0, True, False, True), 15)
'... und zusammen mit Änderungsdatum und Ordnernamen ausgeben
WScript.Echo SubFolder.DateLastModified, SizeFormatted, SubFolder.Name
Next

MsgBox SubFolder.DateLastModified, SizeFormatted, SubFolder.Name

Kannste mir nochmal helfen?? Kriegs net ganz hin... kommt der Fehler, reihe 8: unerwarteter prozedur aufruf
Bitte warten ..
Mitglied: bastla
20.07.2009 um 09:49 Uhr
Hallo m0nstar!

Wenn Du den Pfad mit "J:\" vorgeben willst, dann einfach:
Folder = "J:\"
Die Verwendung von SpecialFolders() ist nur erforderlich, wenn Du bestimmte "spezielle" Ordner (neben den "Eigenen Dateien" etwa "Desktop", "Programme", "Startmenü" oder "Favoriten") verwenden willst ...

Die "MsgBox"-Zeile ist übrigens an dieser Stelle (außerhalb der Schleife) sinnlos; ansonsten erzeugt das "WScript.Echo" (wenn das Script nicht über "cscript" gestartet wird) ohnehin MsgBox-Ausgaben.
Noch zum eigentlichen Fehler: Wenn Du "Option Explicit" verwendest, musst Du alle Variablen deklarieren, also auch "SubFolder" und "SizeFormatted".

Grüße
bastla

P.S.: Wenn Du Code postest, dann bitte mit entsprechender Formatierung.
Bitte warten ..
Mitglied: m0nstar
20.07.2009 um 10:48 Uhr
hey danke dir es klappt nun...aber hätteste noch eine idee wie ich die alle aufeinmal liste??? das ich nicht für jeden ordner eine msgbox bekomme sondern eine für alle?

01.
Option Explicit 
02.
 
03.
Dim Folder, fso, SubFolder, SizeFormatted 
04.
 
05.
Folder= "J:\" 'Pfad für "Eigene Dateien" 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
09.
    'Ordnergröße in Byte mit Tausendertrennzeichen schreiben und 
10.
    '  durch vorangestellte Leerzeichen auf eine Länge von 15 bringen ... 
11.
    SizeFormatted = Right(Space(15) & FormatNumber(SubFolder.Size, 0, True, False, True), 15) 
12.
    '... und zusammen mit Änderungsdatum und Ordnernamen ausgeben 
13.
    WScript.Echo SubFolder.DateLastModified, SizeFormatted, SubFolder.Name 
14.
Next
Bitte warten ..
Mitglied: bastla
20.07.2009 um 10:52 Uhr
Hallo m0nstar!

Um alles in einer MsgBox auszugeben (so richtig schön sieht das aber auch mit der geänderten Reihenfolge der Ausgabefelder nicht aus) etwa so:
01.
Option Explicit 
02.
 
03.
Dim Folder, fso, SubFolder, SizeFormatted, Result 
04.
 
05.
Folder= "J:\" 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
09.
    'Ordnergröße in Byte mit Tausendertrennzeichen schreiben und 
10.
    '  durch vorangestellte Leerzeichen auf eine Länge von 15 bringen ... 
11.
    SizeFormatted = Right(Space(15) & FormatNumber(SubFolder.Size, 0, True, False, True), 15) 
12.
    '... und zusammen mit Änderungsdatum und Ordnernamen als neue Zeile in eine Variable schreiben 
13.
    Result = Result & SubFolder.DateLastModified & vbTab & SizeFormatted & vbTab & SubFolder.Name & vbCrLF 
14.
Next 
15.
WScript.Echo Result
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
20.07.2009 um 10:57 Uhr
perfekt danke genauso habe ich mir das vorgestellt. so reicht mir das schon.

Vielen lieben Dank.

Gruß,

m0nstar
Bitte warten ..
Mitglied: m0nstar
21.07.2009 um 14:53 Uhr
habe noch eine frage hier zu:

Wie bekomme ich es hin, 1. das es in MB angezeigt wird die Größe und 2. das die überschriften nur einmal ganz oben sind. Versuch auch die ganze zeit die Reihenfolge zuändern (Ordnername, Größe, Anderungsdatum)

thx schonma
Bitte warten ..
Mitglied: bastla
21.07.2009 um 21:35 Uhr
Hallo m0nstar!

Etwa so:
01.
Folder= "J:\" 
02.
 
03.
h1="Letzte Änderung:     " 
04.
h2="Größe in KByte:   " 
05.
h3="Ordner:   " 
06.
Result = h1 & vbTab & h2 & vTab & h3 & vbCrLF 
07.
'Result = h3 & vbTab & h2 & vTab & h1 & vbCrLF 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
11.
	SizeFormatted = Right(Space(11) & FormatNumber(SubFolder.Size/1000, 0, True, False, True), 11) 
12.
	Result = Result & SubFolder.DateLastModified & vbTab & SizeFormatted & vbTab & SubFolder.Name & vbCrLF 
13.
	'Result = Result & SubFolder.Name & vbTab & SubFolder.DateLastModified & vbTab & SizeFormatted & vbCrLF 
14.
Next 
15.
WScript.Echo Result
Die geänderte Reihenfolge findest Du in den auskommentierten Zeilen.

Die Größe wird übrigens (entsprechend der Angabe in der Überschrift) als "KByte" ermittelt (Faktor 1000) - falls Du KiB oder tatsächlich MB / MiB verwenden willst, den Wert entsprechend anpassen ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
22.07.2009 um 08:37 Uhr
hmmm danke erstmal im endeffekt ist das so wie ich das wollte, nur wie bekomme ich da bissel ordnung rein, das ist ziemlich durcheinander...geht glaub ich mit nem pad oder so aber wie ich das hier anwende, kannste mir nochmal helfen??? Und wie kann ich oben den Titel des Fensters ändern??

Screenshot: http://s1.picsafe.de/files/b843f8e9/Snap1.jpg

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
22.07.2009 um 08:51 Uhr
Hallo m0nstar!
wie bekomme ich da bissel ordnung rein, das ist ziemlich durcheinander...
Was meinst Du wohl, weswegen in meinem Vorschlag die Reihenfolge Datum - Größe - Name war ...

Da VBScript keine eigene Oberfläche zu bieten hat, könntest Du nur entweder Richtung "HTA" gehen oder das Ergebnis zwischenspeichern und dann in einem Editor (auch "notepad" sollte genügen) anzeigen lassen oder zB in Excel / Calc importieren.
Und wie kann ich oben den Titel des Fensters ändern??
[OT] Auch mit einem Fragezeichen am Ende ist der Sinn dieses Satzes zu erkennen. [/OT]

Da Du offensichtlich eine MsgBox (und nicht eine Ausgabe in der Konsole) verwenden möchtest, tu dies einfach:
MsgBox Result, vbOKOnly, "Dein Titel"
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
22.07.2009 um 09:15 Uhr
Hallo bastla,

vielen dank dir....kannst das echt gut muss man dir lassen

Das mit der Ordnung habe ich jetzt nach deiner alten Reihenfolge wieder umgestellt und reicht mir erstmal, vllt bau ich mir das noch so wie du schon sagtest, dass es mir in Excel auch nochmal reingespeichert wird. Das denke ich kriege ich aber hin.

Und das mit dem Titel hat sich dank deines Tips auch nun geklärt, also bleibt mir nur noch zusagen: VIELEN DANK, du hast mir sehr weitergeholfen!

Gruß,
m0nstar
Bitte warten ..
Mitglied: m0nstar
23.07.2009 um 10:48 Uhr
Eine kleine Frage hierzu noch, kann man auch nach der Größe sortieren? Also von Groß (oben) nach klein (unten)

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
24.07.2009 um 21:54 Uhr
Hallo m0nstar!

Für die Sortierung gibt es mehrere Möglichkeiten (Algorithmen), die allerdings alle voraussetzen, dass Du zunächst alle Daten sammelst und in passender Form (Array oder als Text mit fester Breite jeder Spalte formatiert) zur Verfügung stellst.

Die Alternative, zu der ich in letzter Zeit gerne greife, ist das "Disconnected Recordset", eine Datenbank, die temporär (und nur im Speicher) erstellt wird - etwa so:
01.
Folder= "J:\" 
02.
 
03.
Const adVarChar = 200 
04.
Const adDBTimeStamp = 135 
05.
Const MaxCharacters = 255 
06.
Const adDouble = 5 
07.
 
08.
'Datenbank erzeugen 
09.
Set DataList = CreateObject("ADOR.Recordset") 
10.
'Felder festlegen 
11.
DataList.Fields.Append "Dat", adDBTimeStamp 
12.
DataList.Fields.Append "Fld", adVarChar, MaxCharacters 
13.
DataList.Fields.Append "Siz", adDouble 
14.
DataList.Open 
15.
 
16.
Set fso = CreateObject("Scripting.FileSystemObject") 
17.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
18.
    'Datensatz erstellen, ... 
19.
    DataList.AddNew 
20.
    '... befüllen und ... 
21.
    DataList("Dat") = SubFolder.DateLastModified 
22.
    DataList("Fld") = SubFolder.Name 
23.
    DataList("Siz") = SubFolder.Size 
24.
    '... in die Datenbank übernehmen 
25.
    DataList.Update 
26.
Next 
27.
 
28.
h1="Letzte Änderung:     " 
29.
h2="Größe in KByte:   " 
30.
h3="Ordner:   " 
31.
Result = h1 & vbTab & h2 & vTab & h3 & vbCrLF 
32.
 
33.
'Datenbank passend sortieren ... 
34.
DataList.Sort = "Siz DESC" 
35.
'... und beim ersten Satz beginnend ... 
36.
DataList.MoveFirst 
37.
'... bis zum Ende durchackern 
38.
Do Until DataList.EOF 
39.
    'Daten auslesen und formatiert in Ausgabezeile packen 
40.
    SizeFormatted = Right(Space(11) & FormatNumber(DataList.Fields.Item("Siz") / 1000, 0, True, False, True), 11) 
41.
    Result = Result & FormatDateTime(DataList.Fields.Item("Dat")) & vbTab & SizeFormatted & vbTab & DataList.Fields.Item("Fld") & vbCrLF 
42.
    'weiter zum nächsten Datensatz 
43.
    DataList.MoveNext 
44.
Loop 
45.
'alle Datensätze erledigt - Ergebnis anzeigen 
46.
WScript.Echo Result
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
27.07.2009 um 08:18 Uhr
Hallo bastla,

erstmal dickes dankeschön, im großen und ganzen genauso wie ich das wollte. Frage ist nur, ist das eine ziemlich Ressourcen fressende Variante? Wie gesagt keine Frage, das läuft wie es soll

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
27.07.2009 um 10:03 Uhr
Hallo m0nstar!
ist das eine ziemlich Ressourcen fressende Variante?
Wie viele Tausend Unterordner (die dann alle in einer MsgBox angezeigt werden ) hast Du denn?

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
27.07.2009 um 10:46 Uhr
Hallo bastla,

ich habe da so 15-20 Ordner bedeutet schon bei mir das er so 20-30 sekunden brauch, ich habe da einfach jetzt ne Message vor gemacht die sich automatisch nach 15 sekunden schließt, damit der Anwender weiß, damit das Programm noch läuft.

Frage wäre noch ob es schlau wäre, dazu noch eine Excel Tabelle anzulegen, damit der Anwender auch nachher nochmal gucken kann. Hätteste da auch ne Idee?

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
27.07.2009, aktualisiert 18.10.2012
Hallo m0nstar!
ich habe da so 15-20 Ordner bedeutet schon bei mir das er so 20-30 sekunden brauch
... was aber nicht an der Sortierung liegen dürfte ...
Frage wäre noch ob es schlau wäre, dazu noch eine Excel Tabelle anzulegen, damit der Anwender auch nachher nochmal gucken kann. Hätteste da auch ne Idee?
Warum dann nicht gleich direkt in Excel erledigen - wie zB hier in ähnlicher Form ...

Alternativ dazu kannst Du ja das Ganze (wie oben schon erwähnt) einfach in eine Textdatei schreiben und dann standardmäßig mit dem Editor anzeigen lassen - ob die MsgBox weggeklickt oder das Editor-Fenster geschlossen werden muss, macht wohl nicht viel Unterschied ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
27.07.2009 um 11:09 Uhr
Hallo bastla,

"Warum dann nicht gleich direkt in Excel erledigen - wie zB hier in ähnlicher Form ..."

Meinte eigentlich das beides gemacht wird, also das es ausgegeben wird so wie es jetzt ist nach deinem Code, es aber nebenbei noch eine Excel Tabelle erstellt wird, die sobalt das Programm beendet wird geleert wird.

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
27.07.2009 um 11:13 Uhr
Hallo m0nstar!

Dann schreib einfach die Infos in eine .csv-Datei (auf dem Desktop), und wer sie tatsächlich in Excel benötigt, ist so nur einen Doppelklick davon entfernt ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
27.07.2009 um 11:18 Uhr
Hallo bastla,

danke für die idee. Das ist keine schlechte Idee werds mal probieren, thx!

Gruß,
m0nstar
Bitte warten ..
Mitglied: m0nstar
29.07.2009 um 08:40 Uhr
Hallo,

eine Frage noch, wenn ich noch einen 2. und 3. Ordner auslesen will aber alles in einer Box ausgeben lassen will was muss ich da ändern?

01.
Folder= "J:\"
So und nun sollen noch zwei SpezialFolder ausgelesen werden, einmal soll die größe des Ordners Desktop angezeigt werden und einmal vom temp Ordner, hier aber nicht mehr die Unterordner sondern nur die Ordner selber.

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
29.07.2009 um 11:17 Uhr
Hallo m0nstar!

Wenn Du alles in einen Topf werfen wolltest, (ungetestet) etwa so:
01.
Set WshShell = WScript.CreateObject("WScript.Shell") 
02.
strDesktop = WshShell.SpecialFolders("Desktop") 
03.
strTemp = WshShell.ExpandEnvironmentStrings("%temp%") 
04.
 
05.
Folders = Array("J:\", strDesktop, strTemp) 
06.
 
07.
Const adVarChar = 200 
08.
Const adDBTimeStamp = 135 
09.
Const MaxCharacters = 255 
10.
Const adDouble = 5 
11.
 
12.
'Datenbank erzeugen 
13.
Set DataList = CreateObject("ADOR.Recordset") 
14.
'Felder festlegen 
15.
DataList.Fields.Append "Dat", adDBTimeStamp 
16.
DataList.Fields.Append "Fld", adVarChar, MaxCharacters 
17.
DataList.Fields.Append "Siz", adDouble 
18.
DataList.Open 
19.
 
20.
Set fso = CreateObject("Scripting.FileSystemObject") 
21.
'Alle vorgegebenen Ordner durchgehen 
22.
For Each Folder In Folders 
23.
    For Each SubFolder In fso.GetFolder(Folder).SubFolders 
24.
        'Datensatz erstellen, ... 
25.
        DataList.AddNew 
26.
        '... befüllen und ... 
27.
        DataList("Dat") = SubFolder.DateLastModified 
28.
        DataList("Fld") = SubFolder.Name 'oder, vermutlich besser: SubFolder.Path 
29.
        DataList("Siz") = SubFolder.Size 
30.
        '... in die Datenbank übernehmen 
31.
        DataList.Update 
32.
    Next 
33.
Next 
34.
     
35.
h1="Letzte Änderung:     " 
36.
h2="Größe in KByte:   " 
37.
h3="Ordner:   " 
38.
Result = h1 & vbTab & h2 & vTab & h3 & vbCrLF 
39.
 
40.
'Datenbank passend sortieren ... 
41.
DataList.Sort = "Siz DESC" 
42.
'... und beim ersten Satz beginnend ... 
43.
DataList.MoveFirst 
44.
'... bis zum Ende durchackern 
45.
Do Until DataList.EOF 
46.
    'Daten auslesen und formatiert in Ausgabezeile packen 
47.
    SizeFormatted = Right(Space(11) & FormatNumber(DataList.Fields.Item("Siz") / 1000, 0, True, False, True), 11) 
48.
    Result = Result & FormatDateTime(DataList.Fields.Item("Dat")) & vbTab & SizeFormatted & vbTab & DataList.Fields.Item("Fld") & vbCrLF 
49.
    'weiter zum nächsten Datensatz 
50.
    DataList.MoveNext 
51.
Loop 
52.
'alle Datensätze erledigt - Ergebnis anzeigen 
53.
WScript.Echo Result
Da Du das vermutlich nicht willst, mach aus dem ursprünglichen Script ein "Sub", rufe es jeweils mit Übergabe des zu bearbeitenden Ordners auf, und gib erst am Ende das Gesamtergebnis aus - zB (genauso ungetestet):
01.
Set WshShell = WScript.CreateObject("WScript.Shell") 
02.
strDesktop = WshShell.SpecialFolders("Desktop") 
03.
strTemp = WshShell.ExpandEnvironmentStrings("%temp%") 
04.
 
05.
Folders = Array("J:\", strDesktop, strTemp) 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
 
09.
Const adVarChar = 200 
10.
Const adDBTimeStamp = 135 
11.
Const MaxCharacters = 255 
12.
Const adDouble = 5 
13.
 
14.
'Kopfzeile erstellen 
15.
h1="Letzte Änderung:     " 
16.
h2="Größe in KByte:   " 
17.
h3="Ordner:   " 
18.
Result = h1 & vbTab & h2 & vTab & h3 & vbCrLF 
19.
 
20.
For Each F In Folders 'alle Ordner durchgehen 
21.
    GetFolderInfo F 
22.
    Result = Result & "===============" & vbCrLF & vbCrLF 
23.
Next 
24.
 
25.
WScript.Echo Result 
26.
'Ende Hauptprogramm 
27.
 
28.
Sub GetFolderInfo(Folder) 
29.
'Datenbank erzeugen 
30.
Set DataList = CreateObject("ADOR.Recordset") 
31.
'Felder festlegen 
32.
DataList.Fields.Append "Dat", adDBTimeStamp 
33.
DataList.Fields.Append "Fld", adVarChar, MaxCharacters 
34.
DataList.Fields.Append "Siz", adDouble 
35.
DataList.Open 
36.
 
37.
For Each SubFolder In fso.GetFolder(Folder).SubFolders 
38.
    'Datensatz erstellen, ... 
39.
    DataList.AddNew 
40.
    '... befüllen und ... 
41.
    DataList("Dat") = SubFolder.DateLastModified 
42.
    DataList("Fld") = SubFolder.Name 
43.
    DataList("Siz") = SubFolder.Size 
44.
    '... in die Datenbank übernehmen 
45.
    DataList.Update 
46.
Next 
47.
 
48.
'Datenbank passend sortieren ... 
49.
DataList.Sort = "Siz DESC" 
50.
'... und beim ersten Satz beginnend ... 
51.
DataList.MoveFirst 
52.
'... bis zum Ende durchackern 
53.
Do Until DataList.EOF 
54.
    'Daten auslesen und formatiert in Ausgabezeile packen 
55.
    SizeFormatted = Right(Space(11) & FormatNumber(DataList.Fields.Item("Siz") / 1000, 0, True, False, True), 11) 
56.
    Result = Result & FormatDateTime(DataList.Fields.Item("Dat")) & vbTab & SizeFormatted & vbTab & DataList.Fields.Item("Fld") & vbCrLF 
57.
    'weiter zum nächsten Datensatz 
58.
    DataList.MoveNext 
59.
Loop 
60.
 
61.
'Datenbank löschen 
62.
Set DataList = Nothing 
63.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
29.07.2009 um 11:41 Uhr
Hallo bastla,

danke erstmal aber bei deinem 2. Skript kommt ein Fehler: http://s1.picsafe.de/files/7b6fab90/Snap7.jpg

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
29.07.2009 um 11:50 Uhr
Hallo m0nstar!

Da es in meinem Script keine Zeile 218 gibt, solltest Du die betreffende Zeilennummer angeben ...

... dürfte aber Zeile 51 sein - wenn es keine Unterordner gibt, kann auch nicht der erste Datensatz aufgerufen werden, daher besser so:
If Not DataList.EOF Then DataList.MoveFirst
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
29.07.2009 um 11:59 Uhr
Hallo bastla,

in der Zeile steht das "DataList.MoveFirst"

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
29.07.2009 um 12:08 Uhr
Hallo m0nstar!

Hatte zwischenzeitlich doch etwas getestet und schon oben ergänzt ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
29.07.2009 um 12:17 Uhr
Hallo bastla,

soweit klappt das jetzt nur irgendwie noch net ganz richtig.

Der obere Teil ist komplett richtig, den ließt er richtig aus, danach will ich aber nur noch wissen wie groß der Ordner Desktop und Temp ist, nicht welche Ordner noch dadrin sind.

Siehe: http://s1.picsafe.de/files/5c62bcf9/Snap9.jpg

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
29.07.2009 um 12:32 Uhr
Hallo m0nstar!

Eigentlich solltest Du das schon selbst kombinieren können, aber gut ...

Es genügt in diesem Fall ja das ursprüngliche Script mit dem zusätzlichen Auslesen der beiden Ordnergrößen - Letzteres etwa so:
01.
Set WshShell = WScript.CreateObject("WScript.Shell")  
02.
strDesktop = WshShell.SpecialFolders("Desktop")  
03.
strTemp = WshShell.ExpandEnvironmentStrings("%temp%")  
04.
 
05.
Result = Result & "==========" & vbCrLF 
06.
 
07.
Set Fld = fso.GetFolder(strDesktop) 
08.
SizeFormatted = Right(Space(11) & FormatNumber(Fld.Size / 1000, 0, True, False, True), 11) 
09.
Result = Result & FormatDateTime(Fld.DateLastModified) & vbTab & SizeFormatted & vbTab & Fld.Name & vbCrLF 
10.
 
11.
Set Fld = fso.GetFolder(strTemp) 
12.
SizeFormatted = Right(Space(11) & FormatNumber(Fld.Size / 1000, 0, True, False, True), 11) 
13.
Result = Result & FormatDateTime(Fld.DateLastModified) & vbTab & SizeFormatted & vbTab & Fld.Name & vbCrLF
Schöner wäre es natürlich, das Auslesen in eine Function() auszulagern, aber funktionieren sollte es auch so ...

Grüße
bastla

[Edit] Überzählige schließende Klammer nach "Fld.Name" in den Zeilen 9 und 13 entfernt [/Edit]
Bitte warten ..
Mitglied: m0nstar
29.07.2009 um 13:13 Uhr
Hallo bastla,

Zitat von bastla:
Es genügt in diesem Fall ja das ursprüngliche Script

Welches Script meinst du jetzt?

Meinst du dieses:

01.
	Folder= "J:\" 
02.
 
03.
	Const adVarChar = 200 
04.
	Const adDBTimeStamp = 135 
05.
	Const MaxCharacters = 255 
06.
	Const adDouble = 5 
07.
 
08.
	'Datenbank erzeugen 
09.
	Set DataList = CreateObject("ADOR.Recordset") 
10.
 
11.
	'Felder festlegen 
12.
	DataList.Fields.Append "Dat", adDBTimeStamp 
13.
	DataList.Fields.Append "Fld", adVarChar, MaxCharacters 
14.
	DataList.Fields.Append "Siz", adDouble 
15.
	DataList.Open 
16.
 
17.
	Set fso = CreateObject("Scripting.FileSystemObject") 
18.
	For Each SubFolder In fso.GetFolder(Folder).SubFolders 
19.
	    'Datensatz erstellen, ... 
20.
	    DataList.AddNew 
21.
	    '... befüllen und ... 
22.
	    DataList("Dat") = SubFolder.DateLastModified 
23.
	    DataList("Fld") = SubFolder.Name 
24.
	    DataList("Siz") = SubFolder.Size 
25.
	    '... in die Datenbank übernehmen 
26.
	    DataList.Update 
27.
	Next 
28.
 
29.
	ueberschrift1="Letzte Änderung:     " 
30.
	ueberschrift2="Größe in KByte:   " 
31.
	ueberschrift3="Ordner:   " 
32.
	Result = ueberschrift1 & vbTab & ueberschrift2 & vbTab & ueberschrift3 & vbCrLF 
33.
 
34.
	'Datenbank passend sortieren ... 
35.
	DataList.Sort = "Siz DESC" 
36.
 
37.
	'... und beim ersten Satz beginnend ... 
38.
	DataList.MoveFirst 
39.
 
40.
	'... bis zum Ende durchackern 
41.
	Do Until DataList.EOF 
42.
 
43.
	    'Daten auslesen und formatiert in Ausgabezeile packen 
44.
	    SizeFormatted = Right(Space(15) & FormatNumber(DataList.Fields.Item("Siz") / 1000, 0, True, False, True), 15) 
45.
	    Result = Result & FormatDateTime(DataList.Fields.Item("Dat")) & vbTab & SizeFormatted & vbTab & DataList.Fields.Item("Fld") & vbCrLF 
46.
 
47.
	    'weiter zum nächsten Datensatz 
48.
	    DataList.MoveNext 
49.
 
50.
	Loop 
51.
 
52.
	'alle Datensätze erledigt - Ergebnis anzeigen 
53.
	MsgBox Result
Also irgendwie stell ich mich grad blöd an... vllt zuviel auf einmal um das zu lernen...oder ich bin grad durcheinander gekommen

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
29.07.2009 um 16:37 Uhr
Hallo m0nstar!

Ja, dieses Script war gemeint - jetzt musst Du eigentlich nur noch zwischen Zeile 52 und 53 die 13 zusätzlichen Zeilen einfügen (und zur Sicherheit noch die Zeile 38 auf
If Not DataList.EOF Then DataList.MoveFirst
anpassen ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
30.07.2009 um 09:10 Uhr
Hallo bastla,

genauso wie du das geschrieben hast, habe ich es gestern getestet, es kommt immer nur Anwendungsende erwartet.

01.
	Folder= "J:\" 
02.
 
03.
	Const adVarChar = 200 
04.
	Const adDBTimeStamp = 135 
05.
	Const MaxCharacters = 255 
06.
	Const adDouble = 5 
07.
 
08.
	'Datenbank erzeugen 
09.
	Set DataList = CreateObject("ADOR.Recordset") 
10.
 
11.
	'Felder festlegen 
12.
	DataList.Fields.Append "Dat", adDBTimeStamp 
13.
	DataList.Fields.Append "Fld", adVarChar, MaxCharacters 
14.
	DataList.Fields.Append "Siz", adDouble 
15.
	DataList.Open 
16.
 
17.
	Set fso = CreateObject("Scripting.FileSystemObject") 
18.
	For Each SubFolder In fso.GetFolder(Folder).SubFolders 
19.
	    'Datensatz erstellen, ... 
20.
	    DataList.AddNew 
21.
	    '... befüllen und ... 
22.
	    DataList("Dat") = SubFolder.DateLastModified 
23.
	    DataList("Fld") = SubFolder.Name 
24.
	    DataList("Siz") = SubFolder.Size 
25.
	    '... in die Datenbank übernehmen 
26.
	    DataList.Update 
27.
	Next 
28.
 
29.
	ueberschrift1="Letzte Änderung:     " 
30.
	ueberschrift2="Größe in KByte:   " 
31.
	ueberschrift3="Ordner:   " 
32.
	Result = ueberschrift1 & vbTab & ueberschrift2 & vbTab & ueberschrift3 & vbCrLF 
33.
 
34.
	'Datenbank passend sortieren ... 
35.
	DataList.Sort = "Siz DESC" 
36.
 
37.
	'... und beim ersten Satz beginnend ... 
38.
	If Not DataList.EOF Then DataList.MoveFirst 
39.
 
40.
	'... bis zum Ende durchackern 
41.
	Do Until DataList.EOF 
42.
 
43.
	    'Daten auslesen und formatiert in Ausgabezeile packen 
44.
	    SizeFormatted = Right(Space(15) & FormatNumber(DataList.Fields.Item("Siz") / 1000, 0, True, False, True), 15) 
45.
	    Result = Result & FormatDateTime(DataList.Fields.Item("Dat")) & vbTab & SizeFormatted & vbTab & DataList.Fields.Item("Fld") & vbCrLF 
46.
 
47.
	    'weiter zum nächsten Datensatz 
48.
	    DataList.MoveNext 
49.
 
50.
	Loop 
51.
 
52.
	Set WshShell = WScript.CreateObject("WScript.Shell")  
53.
	strDesktop = WshShell.SpecialFolders("Desktop")  
54.
	strTemp = WshShell.ExpandEnvironmentStrings("%temp%")  
55.
 
56.
	Result = Result & "==========" & vbCrLF 
57.
 
58.
	Set Fld = fso.GetFolder(strDesktop) 
59.
	SizeFormatted = Right(Space(15) & FormatNumber(Fld.Size / 1000, 0, True, False, True), 15) 
60.
	Result = Result & FormatDateTime(Fld.DateLastModified) & vbTab & SizeFormatted & vbTab & Fld.Name) & vbCrLF 
61.
 
62.
	Set Fld = fso.GetFolder(strTemp) 
63.
	SizeFormatted = Right(Space(15) & FormatNumber(Fld.Size / 1000, 0, True, False, True), 15) 
64.
	Result = Result & FormatDateTime(Fld.DateLastModified) & vbTab & SizeFormatted & vbTab & Fld.Name) & vbCrLF 
65.
 
66.
		'alle Datensätze erledigt - Ergebnis anzeigen 
67.
		MsgBox Result
Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
30.07.2009 um 10:19 Uhr
Hallo m0nstar!

Mein Fehler - liegt an der überzähligen schließenden Klammer nach "Fld.Name" in Zeile 60 bzw 64 ...

BTW: Wenn Du Fehlermeldungen postest, bitte auch jeweils mit Angabe der Zeile / Position!

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
30.07.2009 um 10:27 Uhr
Hallo bastla,

wegen der Fehlermeldung, ich habe ja nen kleines Programm gemacht da wäre das Zeile 232 oder so davon hätteste wahrscheinlich net viel, aber danke es klappt nun.

Wenn ich das Desktop und Temp Verzeichnis auf einer anderen HDD nehmen will weil ich zum Beispiel auf meiner 2. HDD auch nen anderes Win installed habe, kann ich da einfach nen Pfad reinmachen anstatt dem Desktop und dem %temp%

Danach lass ich dich in ruhe und nerv dich nimmer

Danke dir für die große Hilfe

Gruß,
m0nstar
Bitte warten ..
Mitglied: m0nstar
30.07.2009 um 11:00 Uhr
Hallo bastla,

ich habe es hinbekommen, DANKE DIR!!!

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
30.07.2009 um 11:04 Uhr
Hallo m0nstar!

Wenn Du den exakten Pfad kennst, kannst Du diesen natürlich direkt angeben, also etwa:
Set Fld = fso.GetFolder("K:\Test")
Allerdings würde ich zur Verwendung von Variablen bzw eines Arrays raten bzw die gewünschten Pfade sogar als ".ini"-Datei ablegen - jede dieser Alternativen ist leichter zu warten, als wenn irgendwo (zB in Zeile 228) ein Pfad angegeben ist.

Daher als Alternative zu meinem Vorschlag für die beiden zusätzlichen Ordner:
01.
Set WshShell = WScript.CreateObject("WScript.Shell") 
02.
strDesktop = WshShell.SpecialFolders("Desktop") 
03.
strTemp = WshShell.ExpandEnvironmentStrings("%temp%") 
04.
 
05.
SingleFolders = Array(strDesktop, strTemp, "K:\Test")
am Anfang des Codes festlegen und später dann:
01.
Result = Result & "==========" & vbCrLF 
02.
 
03.
For Each F In SingleFolders 
04.
    Set Fld = fso.GetFolder(F) 
05.
    SizeFormatted = Right(Space(15) & FormatNumber(Fld.Size / 1000, 0, True, False, True), 15) 
06.
	Result = Result & FormatDateTime(Fld.DateLastModified) & vbTab & SizeFormatted & vbTab & Fld.Name & vbCrLF 
07.
Next
Grüße
bastla

P.S.: Ich lass mich ohnehin nicht nerven ...
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch: Dateiname abhängig vom Änderungsdatum auslesen (6)

Frage von freaktastisch zum Thema Batch & Shell ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...