loveboat
Goto Top

Dateien lokalisieren mit EXCEL?

Liste mit Dateinamen in Excel auf Festplatte finden

Hallo,

ich stehe vor dem Problem, dass für eine große Liste mit Dateinamen, die in Excel generiert wurde nun der Speicherort einer jeden Datei gefunden werden soll. Dh.: Mir wäre geholfen wenn jemand ein Tool (zB ein Makro) hätte, was für jede Zeile einer Spalte eine Suche durchführt und mir den Standort der Datei daneben in die näcshte Spalte schreibt. Gibt es sowas?

Ich habe ein ähnliches Makro gefunden, wobei hier der Suchbefehl auf eine Partition / einen Ordner eingeschränkt werden muss und dann -aus irgendeinem Grunde - der gesamte Ordnerinhalt angezeigt wird.

Nach jeder Datei einzeln zu suchen würde zu lange dauern, da es sich um rund 3000 Stück handelt.

Danke für die Hilfe!

Content-Key: 106697

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

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

Member: godlie
godlie Jan 21, 2009 at 11:34:42 (UTC)
Goto Top
Hallo,

kannst du den Suchbereich ein wenig einschränken?Oder soll das "etwas" alle vorhanden Laufwerke abgrasen ?
Member: LoveBoat
LoveBoat Jan 21, 2009 at 11:46:26 (UTC)
Goto Top
Hallo.

Nein, es sollen nicht alle vorhandenen Laufwerke durchsucht werden, aber eine komplette Partition.
Eine Einschränkung des Suchbereichs ist m.E .nicht unbedingt notwendig.
Member: godlie
godlie Jan 21, 2009 at 12:05:46 (UTC)
Goto Top
Also diesbezüglich fällt mir eine sehr banale Methode ein.
Im Root Verzeichnis der Partiton z.b. C:\ ein
dir /S /B > test.txt
machen somit werden alle und zwar wirklich alle Ordner Unterordner abgegrast.

Sieht dann ungefähr so aus:
C:\Dokumente und Einstellungen\x\y\csharp-usb-hid-driver\USBHIDDRIVER\TESTS
C:\Dokumente und Einstellungen\x\y\csharp-usb-hid-driver\USBHIDDRIVER\USB

Dann musst du eigentlich nur noch von hinten anfangen nach dem ersten vorkommnis von \ zu trennen und dann die Dateinamen abzugliechen mit deiner Liste, wenn treffer dann Zeile übernehmen.....

Kommst damit zurecht?
Member: LoveBoat
LoveBoat Jan 21, 2009 at 12:20:33 (UTC)
Goto Top
Hey, Danke!

Den DOS Befehl kannte ich nur ohne das "/b". Das hätte mir im Vorfeld extrem viel Arbeit erleichtert. Insofern schonmal ein dickes Danke!
Was deinen letzten Satz angeht; ich weiß nicht wie ich das machen kann. Ich habe zwar schonmal zwei Tabellen auf Übereinstimmung hin überprüft, aber Zeile übernehmen und von hinten und so... noch nie gemacht.

Tipp?


Gruß,
F
Member: godlie
godlie Jan 21, 2009 at 13:25:28 (UTC)
Goto Top
Sodala

Sub Crawler()
  Dim intFile As Integer
    Dim strText As String
    Dim vntArray As Variant
    Dim localArr As Variant
    Dim fileName As Variant
    
    intFile = FreeFile
    Open "C:\Dokumente und Einstellungen\x\Desktop\test2.txt" For Binary As #intFile  
        strText = Space$(LOF(intFile))
        Get #intFile, , strText
    Close #intFile
    localArr = Range("range1").Value 'Dies ist eine Definierte Range ( Bereich Markieren und benennen )  
    vntArray = Split(Left$(strText, Len(strText) - 2), vbNewLine)
    For i2 = LBound(vntArray) To UBound(vntArray) ' hier wird das Array der Textfile durchlaufen  
        For i1 = LBound(localArr) To UBound(localArr) ' hier wird das Array der Range durchlaufen   
            fileName = Split(vntArray(i2), "\") ' aufsplitten des Pfades  
            If (fileName(UBound(fileName)) = localArr(i1, 1)) Then ' Ubound(filename) gibt mir den letzen Index des Arrays zurück darin befindet sich der Dateiname  
                MsgBox ("Found" & vntArray(i2)) 'Hier ist er Punkt wo du etwas rausschreiben musst. vntArry(i2) beinhaltet den gesamten Pfad  
            End If
        Next i1
    Next i2
End Sub

grüße
Member: LoveBoat
LoveBoat Jan 21, 2009 at 13:53:56 (UTC)
Goto Top
Hey, Danke.

Also, das sieht spannend aus. Ich habe im Grunde keinen Plan von Makros (= cut & paste kann ich, selbst schreiben nicht).

Bei dem Ding da oben sind mir jetzt zwei Sachen aufgefallen:
1. Zeile 09: Meine Datei liegt natürlich woanders und heißt auch anders, das habe ich dann sinngemäß ersetzt.
2. Diese Änderung alleine reicht nicht aus. Du hast ja auch in Zeile 13 stehen dass dort etwas eingefügt werden müsste. Mit dem hint kann ich allerdings nichts anfangen.
Hatte es zunächst einfach so probiert und natürlich eine Fehlermeldung für genau diese Stelle bekommen. --> Was genau muss markiert und benannt werden? Ein Bereich in der Tabelle?


Achso, habs verstanden. Aber jetzt sagt mir der Fehlerreport in Zeile 14 sei ein Fehler.
I
Member: godlie
godlie Jan 22, 2009 at 09:14:28 (UTC)
Goto Top
Hallo

Ein Bereich der Tabelle ist die Sache die du definieren musst.
Es geht übrigens auch so:
Range("B2:C8")  

Weiters ist dann halt der Punkt, dass du den Pfad hinschreiben willst.
Wie willst du den Pfad hinschreiben? soll es ein Hyperlink werden? oder nur ein einfacher text?

grüße
Member: LoveBoat
LoveBoat Jan 22, 2009 at 09:55:17 (UTC)
Goto Top
Hey,

also das mit der Range habe ich noch hinbekommen. Es soll im Grund ja einfach eine Spalte (rund 3000 Zeilen) durchsucht werden.
Wie der Pfad dann ausgegeben wird ist mir im Grunde egal. Ich muss halt die fehlenden Dateien lokalisieren und kopieren (es handelt sich um zwei Rechner - bzw. ein Archiv).
Weiß nicht was da am sinnvollsten wäre...?
Member: godlie
godlie Jan 22, 2009 at 10:03:15 (UTC)
Goto Top
Hm das ist eine gute Frage.
WIe sieht denn das aus, ist jede Datei die du in dieser Liste hast irgendwohin zu kopieren?
Wenn ja dann würd ich das gleich mit dem Makro erledigen, wenn Nein dann würd ich mir die Pfadinformationen mal im Klartext ablegen und bei bedarf kann ich die Infos ja in eine Stapelverarbeitung überführen und dort abarbeiten lassen.

Ich persönlich bin für beide Lösungen offen und kann dir da helfen......

grüße
Member: LoveBoat
LoveBoat Jan 22, 2009 at 11:45:14 (UTC)
Goto Top
Hallo,

also, ich habe das jetzt gerade laufen. Das Problem ist leider, dass ich jeden Fund mit OK bestätigen muss. Das ist in sofern problematisch als dass die eine Liste zwar "nur" 3000 Positionen beeinhaltet aber die txt-File ungefähr 10mal soviel.
Ich bräuchte einfach nur die Lokalisation (sprich der erste Fund in der Textliste) ausgegeben in Spalte B. --> D.h. neben dem Dateinamen sollte dann der Fund aus der Textfile stehen.
Member: godlie
godlie Jan 22, 2009 at 11:54:55 (UTC)
Goto Top
Hm hehe ja das Problem hatte ich auch da half nur Flasche auf die Entertaste stellen und Kaffe trinken gehen.

Also zu dem fehlt dir noch :

in der zeile 19 wo die MsgBox steht ist folgendes einzutragen die Msgbox kannst rauslöschen

Nehmen wir an deine zu suchenden Werte stehen in der Reihe A Ergebnisse kommen in die Reihe B

Range("B"&i1).Value = vntArray(i2)  

Damit sollte es Gehen
Member: LoveBoat
LoveBoat Jan 22, 2009 at 12:04:04 (UTC)
Goto Top
Zeile 19 habe ich jetzt durch

Range("B"&i1).Value = vntArray(i2)

ersetzt. jetzt rechnet sich Excel die Seele aus dem Leib. Ich geb ihm noch 5 Minuten, dann sollte es doch eigentlich fertig sein?

Ich bin gespannt....
Member: LoveBoat
LoveBoat Jan 22, 2009 at 12:08:00 (UTC)
Goto Top
Yes we can!
Hat geklappt!!
Ich bin von den Socken, das hilft mir jetzt und in alle Ewigkeit. Super, super, super!

Tausend Dank!
Member: godlie
godlie Jan 22, 2009 at 12:09:21 (UTC)
Goto Top
Freut mcih wenns funktioniert hat, ich habs nur mit einer kleinen Liste probiert und da war er schon recht fix dabei.