Ordner auslesen und grafisch darstellen, nur wie?

Hallo zusammen,
ich stehe vor folgendem Problem:
Auf einer Festplatte sind etliche Ordner, die wirr beschriftet sind:
c:\>hubr_0815471_1\
oder so in der Art.
Die Ordner beinhalten wiederum jede Menge Worddokumente. Diese Dokumente zeigen, wann sie zum letzten Mal bearbeitet oder erstellt wurden (Ganz normal im Explorer - Datumsanzeige).
Ich bräuchte jetzt eine Lösung, mit der ich diese unverständlichen Ordnernamen ordentlich darstellen kann.
Aus c:\>hubr_0815471_1\ mach Hubraum 1
aus c:\>hubr_0815471_2\ mach Hubraum 2 usw.
Die Ordner selbst können und dürfen NICHT umbenannt werden.
Und zur Krönung soll neben „Hubraum 1“ das Datum stehen, was die letzte bzw. jüngste Veränderung der beinhaltenden Dokumente anzeigt.
Wenn ein Dokument im Ordner „Hubraum 43“ verändert oder neu erstellt wurde, soll dieser Ordner ganz nach oben rutschen, damit man erkennen kann, dass in diesem Ordner eine aktuelle Veränderung stattfand.
HUBRAUM 43 - 27.05.2010
HUBRAUM 7 - 01.01.1998
usw.
Ich bin um alles froh.
Mit welchen Suchbegriffen Ihr googlen würdet,
wie ihr es in Java, PHP, C, Excel oder wie auch immer lösen würdet.
Mit der Antwort: Vergiss es - geht nicht könnte ich auch leben, dann spar ich mir das weitersuchen.

Achja, und gemäß den Richtlinien:
Es ist keine Hausaufgabe, ich ärgere mich beruflich mit einem Problem rum, da wäre es eine ungemeine Erleichterung, eine Lösung zu finden.

Wünsch Euch allen ein schönes Wochenende

Die Ordner beinhalten wiederum jede Menge Worddokumente. Diese
Dokumente zeigen, wann sie zum letzten Mal bearbeitet oder
erstellt wurden (Ganz normal im Explorer - Datumsanzeige).
Ich bräuchte jetzt eine Lösung, mit der ich diese
unverständlichen Ordnernamen ordentlich darstellen kann.
Aus c:\>hubr_0815471_1\ mach Hubraum 1
aus c:\>hubr_0815471_2\ mach Hubraum 2 usw.

Hallo Navn,

dies ist jetzt Vba-Excel-Code, ungetestet.
Er gehört in ein Standardmodul, z.B. Modul1.
Kommste mit klar?
Probiere ihn in einer neuen leeren Mappe aus.
Wenn er funktioniert listet er dir in B die Ordnernamen auf und in A die umgewandelten Ordnernamen.
Das mit dem Datum käme später dazu.

Option Explicit
'
Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Const strDir As String = "C:\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.GetFolder(strDir)
For Each Ordn In objDir.subfolders
 If UCase(Ordn) Like "C:\HUBR\*" Then
 Zei = Zei + 1
 D = Split(Ordn, "\_")
 Cells(Zei, 1) = "Hubraum " & D(2)
 Cells(Zei, 2) = Ordn
 End If
Next Ordn
End Sub

Gruß
Reinhard

Moin,

den Befehl DIR mit der passenden Sortierfolge in eine Datei routen, diese Datei mittels eines Scriptes wunschgemäß editieren und anzeigen.

Nachteil: Jeder ändernde Zugriff würde die Liste ungültig machen, deshalb wäre zu überlegen, ob während der Anzeige die Verzeichnisse gesperrt werden sollten.

Gruß Ralf

ps: Was heißt „grafisch darstellen“?

ps: Was heißt „grafisch darstellen“?

Unter grafisch dargestellt dachte ich an eine html Seite, die untereinander alle „Hubraum“-Ornder anzeigt und die nach aktuellem Datum sortiert.
Wenn ich die Seite eine Stunde offen habe und in der zwischenzeit wurde irgend ein Inhalt verändert, sollte nach „Seite aktualisieren“ eine neue Anordnung erfolgen, die das aktuelle Datum bzw. Ordner an oberste Stelle setzt.

Mit der Aussage " aus c:\>hubra_0815471_1 mach HUBRAUM 1 hab ich mich falsch ausgedrückt.
Treffender wäre: stelle Ordner c:\>hubra_0815471_1 als HUBRAUM 1 dar.
Weil die Ordner ja nicht umbenannt werden dürfen.

Ich versuche jetzt am Wochenende ob ich das mit dem Skrip hinbekomme.

Vielen Dank einstweilen

Hallo Navn,

dies ist jetzt Vba-Excel-Code, ungetestet.
Er gehört in ein Standardmodul, z.B. Modul1.
Kommste mit klar?
Probiere ihn in einer neuen leeren Mappe aus.
Wenn er funktioniert listet er dir in B die Ordnernamen auf
und in A die umgewandelten Ordnernamen.
Das mit dem Datum käme später dazu.

Option Explicit

Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Const strDir As String = „C:“
Set objFSO = CreateObject(„Scripting.FileSystemObject“)
Set objDir = objFSO.GetFolder(strDir)
For Each Ordn In objDir.subfolders
If UCase(Ordn) Like „C:\HUBR*“ Then
Zei = Zei + 1
D = Split(Ordn, „_“)
Cells(Zei, 1) = "Hubraum " & D(2)
Cells(Zei, 2) = Ordn
End If
Next Ordn
End Sub

Gruß
Reinhard

Danke für das Skript
ich habe das mit jetzt mit folgenden Schritten getestet.
Excel - neu
Alt&F11
Tabelle1 -> Einfügen -> Modul
Mappe1 Modul1 (code) - Deinen Code eingefügt
gespeichert
Visual Basic geschlossen
Tabelle gespeichert - Excel Arbeitsmappe mit Macros xlsm

Excel - > Makros -> Makros ausführen - Ordnerliste
Meldung: Laufzeitfehler’9’:
Index außerhalb des gültigen Bereichs

Debuggen:
Cells(Zei, 1) = "Hubraum " & D(2)
gelb hinterlegt

Soviel zur Frage: Kommst Du damit klar?
Keine Ahnung, was ich hier mache :smile:

Hallo Nullahnungvonnix (soviel Zeit muss sein),

Option Explicit
'
Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Const strDir As String = "C:\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.GetFolder(strDir)
Zei=1 'Oder 0 wenn Du keine Überschrift willst
For Each Ordn In objDir.subfolders
 If UCase(Ordn) Like "C:\HUBR\*" Then
 Zei = Zei + 1
 D = Split(Ordn, "\_")
 Cells(Zei, 1) = "Hubraum " & D(2)
 Cells(Zei, 2) = Ordn
 End If
Next Ordn
End Sub

Teste mal, ob der Code nach der Initialisierung der Variablen (siehe neue Zeile vor dem „For Each…“. Man kann übrigens im Debugingfenster mit ? Zei sich den Wert der Variablen ausgeben lassen.

MfG Georg V.

Hallo Navn,

Meldung: Laufzeitfehler’9’:
Index außerhalb des gültigen Bereichs

Cells(Zei, 1) = "Hubraum " & D(2)
gelb hinterlegt

das liegt an D(2), das gibt es nicht also hat ein Ordner keine zwei Unterstriche im Namen.

Soviel zur Frage: Kommst Du damit klar?

Genau das was du schriebst wollte ich dadurch wissen.

Probiere mal den nachstehenden Code, er ist in der vom Debugger markierten Zeile angepasst.
Entspricht ein Ordnername nicht der Form mit den zwei Unterstrichen die du nanntest erscheint in Ax „Fehler“.

Sortiere nach A und teile uns die entsprechenden Ordnernamen mit, ggfs. wie sie nachher angezeigt werden sollen.

Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Const strDir As String = "C:\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.GetFolder(strDir)
For Each Ordn In objDir.subfolders
 If UCase(Ordn) Like "C:\HUBR\*" Then
 Zei = Zei + 1
 D = Split(Ordn, "\_")
 Cells(Zei, 1) = IIf(UBound(D) 2, "Fehler", "Hubraum " & D(UBound(D)))
 Cells(Zei, 2) = Ordn
 End If
Next Ordn
End Sub

Gruß
Reinhard

Aus c:\>hubr_0815471_1\ mach Hubraum 1
aus c:\>hubr_0815471_2\ mach Hubraum 2 usw.
Die Ordner selbst können und dürfen NICHT umbenannt werden.
Und zur Krönung soll neben „Hubraum 1“ das Datum stehen, was
die letzte bzw. jüngste Veränderung der beinhaltenden
Dokumente anzeigt.

Hallo Navn,

teste mal dieses:

Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Dim objFile
Const strDir As String = "C:\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.getfolder(strDir)
Range("A:C").Clear
For Each Ordn In objDir.subfolders
 If UCase(Ordn) Like "C:\HUBR\*" Then
 Zei = Zei + 1
 D = Split(Ordn, "\_")
 Cells(Zei, 1) = IIf(UBound(D) 2, "Fehler", "Hubraum " & D(UBound(D)))
 Cells(Zei, 2) = Ordn
 Cells(Zei, 3) = Format(ZeigeDateizugriffsinfo(Ordn), "DD.MM.YYYY")
 End If
Next Ordn
Range("A:C").Columns.AutoFit
End Sub
'
Function ZeigeDateizugriffsinfo(Ordn)
Dim objFSO, Dat, objFiles, objDir, Datum
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.getfolder(Ordn)
If objDir.Files.Count Datum Then Datum = Dat.DateLastModified
 'MsgBox Dat.DateCreated
 'MsgBox Dat.DateLastAccessed
Next Dat
ZeigeDateizugriffsinfo = Datum
End Function

Gruß
Reinhard

Moin Reinhard,

Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Const strDir As String = „C:“
Set objFSO = CreateObject(„Scripting.FileSystemObject“)
Set objDir = objFSO.GetFolder(strDir)
For Each Ordn In objDir.subfolders
If UCase(Ordn) Like „C:\HUBR*“ Then
Zei = Zei + 1
D = Split(Ordn, „_“)
Cells(Zei, 1) = IIf(UBound(D) 2, „Fehler“, "Hubraum "
& D(UBound(D)))
Cells(Zei, 2) = Ordn
End If
Next Ordn
End Sub

Das klappt schon mal ganz gut. Das erste Mal, dass die Excel Tabelle was ausspuckt :smile:
A1 - Fehler, B1 - C:\hubraum_1
A2 - Fehler, B2 - C:\hubraum_2
A3 - Fehler, B3 - C:\hubraum_3

Ich habe hier in meiner „Testumgebung“ (klingt das protzig) nur diese 3 Odner mal angelegt, die derzeit leer sind. Ich werde jetzt jeweils drei Worddokumente reinpacken, die unterschiedliche Datumsangaben haben.

Bin neugierig wie es weitergeht

Das klappt schon mal ganz gut. Das erste Mal, dass die Excel
Tabelle was ausspuckt :smile:
A1 - Fehler, B1 - C:\hubraum_1
A2 - Fehler, B2 - C:\hubraum_2
A3 - Fehler, B3 - C:\hubraum_3

Ich habe hier in meiner „Testumgebung“ (klingt das protzig)
nur diese 3 Odner mal angelegt, die derzeit leer sind. Ich
werde jetzt jeweils drei Worddokumente reinpacken, die
unterschiedliche Datumsangaben haben.

Hallo,

schau mal:
http://rapidshare.com/files/393220363/kwFSO1.xls.html

Die Subs Erzeugen und Loeschen mußte noch anpassen, am besten dort mit filecopy ältere dateien irgendwoher reinkopieren um eine gute Testumgebung zu schaffen.

Nachfolgend der Code der mappe.

Und, ich weiß nicht genau ob du 100%ig verstanden hast was ich, andere brauchen um dir zu helfen.

du hast da in C:\ diverse Ordner. Vba muß erkennen können welche davon gemeint sind. Z.B. Erkennungszeichen, die Namen fangen alle mit „hub“ an, okay.

Wenn sie nun alle so aufgebaut sind:

hubxxx_xxxxxx_Zahl

kann man sie leicht für die Anzeige umbauen in
Hubraum Zahl

Alle Ordnernamen die nicht dem Aufbau hubxxx_xxxxxx_Zahl entsprechen mußte uns zeigen,und sagen wie die denn nun umgewandelt werden sollen.

Wenn ich schon weiß es gibt ordnernamen die heißen schon hubraum 2, kein Akt, dann berücksichtige ich das und wandle ggfs. nur das h zu H.

Aber letztlich muß ich die Namensstruktur aller in Frage kommenden Ordner kennen und wie sie zur Anzeige umgewandelt werden sollen um Code zu schreiben der das macht.

Gruß
Reinhard

Sub Ordnerliste()
Dim objFSO As Object, objDir As Object, Ordn, D, Zei As Long
Dim objFile
Const strDir As String = "C:\"
Call Erzeugen
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.getfolder(strDir)
Range("A:C").Clear
For Each Ordn In objDir.subfolders
 If UCase(Ordn) Like "C:\HUBR\*" Then
 Zei = Zei + 1
 D = Split(Ordn, "\_")
 Cells(Zei, 1) = IIf(UBound(D) 2, "Fehler", "Hubraum " & D(UBound(D)))
 Cells(Zei, 2) = Ordn
 Cells(Zei, 3) = Format(ZeigeDateizugriffsinfo(Ordn), "DD.MM.YYYY")
 End If
Next Ordn
Call Loeschen
Range("A:C").Columns.AutoFit
End Sub
'
Function ZeigeDateizugriffsinfo(Ordn)
Dim objFSO, Dat, objFiles, objDir, Datum
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.getfolder(Ordn)
If objDir.Files.Count Datum Then Datum = Dat.DateLastModified
 'MsgBox Dat.DateCreated
 'MsgBox Dat.DateLastAccessed
Next Dat
ZeigeDateizugriffsinfo = Datum
End Function
'
Sub Erzeugen()
Close
MkDir "C:\hubr\_1234\_7"
Open "C:\hubr\_1234\_7\test.txt" For Output As #1
Print #1, "jhefgkjes"
Close #1
Open "C:\hubr\_1234\_7\test2.txt" For Output As #1
Print #1, "jhefgkjes"
Close #1
Open "C:\hubr\_1234\_7\test3.txt" For Output As #1
Print #1, "jhefgkjes"
Close #1
MkDir "C:\hubr\_12347"
MkDir "C:\hubr\_134567\_456"
MkDir "C:\hubr\_234aqqwe1234\_4"
End Sub
'
Sub Loeschen()
Kill "C:\hubr\_1234\_7\*.\*"
RmDir "C:\hubr\_1234\_7"
RmDir "C:\hubr\_12347"
RmDir "C:\hubr\_134567\_456"
RmDir "C:\hubr\_234aqqwe1234\_4"
End Sub