Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Verzeichnisse vergleichen, identische auflisten

Verzeichnisse vergleichen, identische auflisten
11.03.2008 11:18:56
{mskro}
Hallo Excelfreunde,
nun benötige auch ich mal wieder etwas Hilfe.
Kennt jemand einen Weg per VBA zwei Verzeichnisse mit Unterverzeichnissen gegenüberzustellen und Datein mit gleichem Namen, gleicher Größe und gleichem Datum aufzulisten?
Verzeichnis 1 steht in Zelle"A1"
Verzeichnis 2 steht in Zelle "B1"
Jetzt sollen gerne die identischen Dateinamen mit Path untereinander von Zelle "A2" abwärts stehen.
Gruß Manfred

Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 13:20:00
Tino
Hallo,
habe mal etwas zusammengebastelt.
Ist mal ein Anfang, es werden Dateien mit gleichen Namen aufgelistet.
Benötig den Verweis auf >>>Microsoft Scripting Runtime Verzeichnis 1 muss in Zelle"A1" stehen
Verzeichnis 2 muss in Zelle "B1" stehen
Gruß Tino

'Dateien aus Ordner Dokumentieren
Sub DateiAuflisten()
Dim MeFile As String
Dim SuchFile As String
Dim i As Long, a As Long
'On Error GoTo Fehler
With Application.FileSearch
.NewSearch
.LookIn = Range("A1") & "\"
.SearchSubFolders = True
.Filename = "*.*" 'Datei Typ
.Execute
For i = 1 To .FoundFiles.Count
'    MsgBox (.FoundFiles(i))
SuchFile = Right(.FoundFiles(i), Len(.FoundFiles(i)) - InStrRev(.FoundFiles(i), "\"))
MeFile = ListFilesInFolder(Range("B1"), True, SuchFile) 'nur Dateiname anzeigen
If MeFile > "" Then
a = a + 1
Cells(1 + a, 2) = MeFile
Cells(1 + a, 1) = SuchFile
End If
Next i
End With
If a = 0 Then MsgBox "Es wurden keine gleichen Dateien gefunden!"
Exit Sub
Fehler:
MsgBox "Es gibt kein Verzeichnis mit dem Namen " & Chr(13) & Range("A1")
End Sub
'Benötig den Verweis auf >>>Microsoft Scripting Runtime 0 Then
ListFilesInFolder = FileItem.Path  '& FileItem.Name
End If
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
ActiveWorkbook.Saved = True
End Function


Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 13:58:00
{mskro}
Hallo Tino,
zuerst mal vielen Dank, das du dir die Zeit genommen hast, das zu erarbreiten.
Was allerdings meinst du mit "Benötigt den Verweis auf >>>Microsoft Scripting Runtime
Mit derartigem Verweis habe ich bisher noch nie gearbeitet oder abreiten müßen.
Gruß Manfred

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 14:21:00
Tino
Hallo,
im VBA- Editor unter Extras Verweise diesen Eintrag suchen und aktivieren.
Habe jetzt noch die Abfrage auf Erstelldatum und Größe der Datei wie gewünscht erweitert.

Option Explicit
'Dateien aus Ordner Dokumentieren
Sub DateiAuflisten()
Dim MeFile As String
Dim SuchFile As String
Dim i As Long, a As Long
Dim Datum As Date, Groe As Long
Dim f As Object
Dim fs As Scripting.FileSystemObject
Set fs = New Scripting.FileSystemObject
'On Error GoTo Fehler
With Application.FileSearch
.NewSearch
.LookIn = Range("A1") & "\"
.SearchSubFolders = True
.Filename = "*.*" 'Datei Typ
.Execute
For i = 1 To .FoundFiles.Count
'    MsgBox (.FoundFiles(i))
SuchFile = Right(.FoundFiles(i), Len(.FoundFiles(i)) - InStrRev(.FoundFiles(i), "\"))
Set f = fs.GetFile(.FoundFiles(i))
Datum = Format(f.DateCreated, "dd.mm.yy") 'DateLastModified, DateCreated,  _
DateLastAccessed
Groe = f.Size
MeFile = ListFilesInFolder(Range("B1"), True, SuchFile, Datum, Groe) 'nur Dateiname  _
anzeigen
If MeFile > "" Then
a = a + 1
Cells(1 + a, 1) = SuchFile
Cells(1 + a, 2) = MeFile
Cells(1 + a, 3) = Datum
Cells(1 + a, 4) = Round(Groe / 1024, 1) & " KByte"
End If
Next i
End With
If a = 0 Then MsgBox "Es wurden keine gleichen Dateien gefunden!"
Exit Sub
Fehler:
MsgBox "Es gibt kein Verzeichnis mit dem Namen " & Chr(13) & Range("A1")
End Sub
'Benötig den Verweis auf >>>Microsoft Scripting Runtime 0 Then
Set f = FSO.GetFile(FileItem.Path)
If (Format(f.DateCreated, "dd.mm.yy") = Datum) And (f.Size = Groe) Then
ListFilesInFolder = FileItem.Path  '& FileItem.Name
End If
End If
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
ActiveWorkbook.Saved = True
End Function


Gruß
Tino

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 14:42:00
Tino
Hallo,
habe es etwas Modifiziert, die zwei Ordner können jetzt über Auswahldialog ausgewählt werden.
https://www.herber.de/bbs/user/50640.xls
Gruß
Tino

AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 14:47:00
{mskro}
Hallo Tino,
das ist auch eine gute Variante, jedoch findet das Makro keine Übereinstimmungen, obwohl welche da sind.
Gruß Manfred

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 15:16:00
Tino
Hallo,
habe auch einen Fehler gemacht.
https://www.herber.de/bbs/user/50642.xls
Sage mir noch mal, was möchtest du in A in B usw. stehen haben.
Datum der Datei.
es gibt das Erstelldatum und das Änderungsdatum welches möchtest du?
Gruß
Tino

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 15:39:00
{mskro}
Hallo Tino,
in Spalte"A" soll der vollständige Path mit Dateiname stehen, von den Dateien, die im ersten Verzeichnis stehen und völlig identisch mit den im zweiten Verzeichnis sind. (Name, Datum und Uhrzeit sind gleich)
Spalte "B" kann so bleiben (Path, Dateiname aus zweitem Verzeichnis)
Spalte "C" sollte das neuere Datum und die Uhrzeit haben. (geändert am)
Spalte "D" die Dateigröße
Das Makro läuft jetzt schon fast so, wie es sein soll. Wenn allerdings bei einer Datei im zweiten Verzeichnis das Änderungsdatum gleich ist, aber die Uhrzeit später ist, wird das noch nicht als Unterschied erkannt. Diese Datei bräuchte nicht mit angezeigt zu werden.
Ich hoffe es ist zu verstehen, wie ich das meine.
Ich möchte einfach 2 Sicherungsverzeichnisse miteinander vergleichen und sehen, welche Dateien doppelt vorhanden sind. Später sollen dann die doppelten im ersten Verzeichnis gelöscht werden. Aber eben nur ältere Versionen.
Gruß Manfred

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 16:07:15
Tino
Hallo,
so müsste es es richtig sein.
https://www.herber.de/bbs/user/50643.xls
nur zur Info: dies funktioniert so nicht mit Office 2007, weil diese Version nicht
Application.FileSearch unterstützt.
Gruß
Tino

Anzeige
AW: Verzeichnisse vergleichen, identische auflisten
12.03.2008 07:41:43
{mskro}
Hallo Tino,
das ist SUPER, vielen Dank.
Gruß Manfred

Etwas habe ich doch noch
12.03.2008 09:54:00
{mskro}
Hallo Tino,
ich stelle gerade fest, das es vielleicht sehr nützlich wäre einen Button zu haben, wo ich das durchsuchen der Unterverzeichnisse "AN" und "AUS" Schalten kann. Bei größeren Verzeichnisstrukturen dauert ein Durchlauf nämlich sehr lange.
Gruß Manfred

Anzeige
AW: Etwas habe ich doch noch
12.03.2008 10:28:00
Tino
Hallo,
verstehe ich nicht An- und AUS- schalten, meinst du etwa so wie eine Pause Taste?
Wüsste jetzt nicht ob dass überhaupt machbar ist in VBA.
Ich arbeite gerate an einen schnelleren Code, der dauert aber noch etwas.
Gruß
Tino

AW: Etwas habe ich doch noch
12.03.2008 10:42:00
{mskro}
Hallo Tino,
mit dem AN- und AUS- schalten meine ich, das mal mit Untervzeichnissen und ein anderes mal ohne Unterverzeichnisen überprüft wird. Es war damit keine Pausentaste gemeint.
CheckBox = True, dann mit Unterverzeichnissen
CheckBox = False, dann ohne Unterverzeichnisse
Ich hoffe nicht, das der Thread zu gemacht wird, bevor du den schnelleren Code fertig haben solltest. Sonst gebe ich dir auch gerne meine eMail.
Gruß Manfred

Anzeige
AW: Etwas habe ich doch noch
12.03.2008 10:49:32
Tino
Hallo,
verstehe ich nicht An- und AUS- schalten, meist du etwa so wie eine Pause Taste?
Ich arbeite gerate an einen schnelleren Code, der tauert aber noch etwas.
Gruß
Tino

AW: Etwas habe ich doch noch
12.03.2008 11:21:00
{mskro}
Hallo Tino,
gemeint ist eine CheckBox auf dem Tabellenblatt ("Tabelle1") neben dem Startbutton.
Ist die CheckBox angehakt, dann überprüft das Makro die gewählten Verzeichnisse inkl. der Unterverzeichnisse.
Ist die CheckBox nicht angehakt, dann werden nur die gewählten Verzeichnisse ohne deren Unterverzeichnisse überprüft.
Gruß Manfred

Anzeige
AW: Etwas habe ich doch noch
12.03.2008 12:01:00
Tino
Hallo,
so habe deine wünsche eingebaut und dieses Programm ist nun
auch um einiges schneller.
https://www.herber.de/bbs/user/50680.xls
Gruß
Tino

AW: Etwas habe ich doch noch
12.03.2008 12:40:00
{mskro}
Hallo Tino,
nun hast du aber die Verzeichnisangabe in Spalte "A" wieder raus genommen.
Kannst du das bitte drin lassen.
Aber sonst läuft es prima
Gruß Manfred

Anzeige
Tino, Du bist der Größte >DANKE<
12.03.2008 14:08:15
{mskro}
Hallo Tino,
das hätte ich niemals ohne Deine Hilfe hinbekommen.
Nochmals ein riesiges Dankeschön
Gruß Manfred

AW: Verzeichnisse vergleichen, identische auflisten
11.03.2008 14:44:00
{mskro}
Hallo Tino,
ich bin schon mal begeistert von der derzeitigen Funktion des Makros.
Das mit dem Runtime Modul habe ich nun auch gefunden.
Zum Makro:
1) Die Einträge des Datums sind allerdings nicht richtig, denn alle Einträge stehen auf dem heutigen Datum
2) Aufgelistet werden alle doppelt vorhandenen Dateien (jedoch ohne das Verzeichnis). Allerdings benötige ich der Spalte "A" nur die, deren Name, Datum und Größe ebenfalls identisch sind.
Es wäre toll, wenn du noch etwas Zeit opfern könntest.
Gruß Manfred
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Verzeichnisse vergleichen und identische Dateien auflisten


Schritt-für-Schritt-Anleitung

Um zwei Verzeichnisse mit Unterverzeichnissen zu vergleichen und identische Dateinamen aufzulisten, kannst Du VBA in Excel verwenden. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf „VBAProject (DeineDatei.xlsx)“ > Einfügen > Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Dim fs As Object
    Sub DateiAuflisten()
       Dim MeFile As String
       Dim SuchFile As String
       Dim i As Long, a As Long
       Dim Datum As Date, Groe As Long
       Dim f As Object
       Set fs = CreateObject("Scripting.FileSystemObject")
    
       With Application.FileSearch
           .NewSearch
           .LookIn = Range("A1") & "\"
           .SearchSubFolders = True
           .Filename = "*.*"
           .Execute
           For i = 1 To .FoundFiles.Count
               SuchFile = Right(.FoundFiles(i), Len(.FoundFiles(i)) - InStrRev(.FoundFiles(i), "\"))
               Set f = fs.GetFile(.FoundFiles(i))
               Datum = Format(f.DateCreated, "dd.mm.yy")
               Groe = f.Size
               If CompareFiles(SuchFile, Range("B1").Value, Datum, Groe) Then
                   a = a + 1
                   Cells(1 + a, 1) = SuchFile
                   Cells(1 + a, 2) = Range("B1") & "\" & SuchFile
                   Cells(1 + a, 3) = Datum
                   Cells(1 + a, 4) = Round(Groe / 1024, 1) & " KByte"
               End If
           Next i
       End With
       If a = 0 Then MsgBox "Es wurden keine gleichen Dateien gefunden!"
    End Sub
    
    Function CompareFiles(SuchFile As String, Verzeichnis As String, Datum As Date, Groe As Long) As Boolean
       Dim f As Object
       On Error Resume Next
       Set f = fs.GetFile(Verzeichnis & "\" & SuchFile)
       If Not f Is Nothing Then
           CompareFiles = (f.DateCreated = Datum And f.Size = Groe)
       Else
           CompareFiles = False
       End If
    End Function
  4. Aktiviere den Verweis auf Microsoft Scripting Runtime: Gehe im VBA-Editor zu Extras > Verweise und aktiviere „Microsoft Scripting Runtime“.

  5. Gib den Pfad der ersten und zweiten Verzeichnisse in die Zellen A1 und B1 ein.

  6. Führe das Makro aus, um die identischen Dateien aufzulisten.


Häufige Fehler und Lösungen

  • Fehlermeldung bei fehlendem Verzeichnis: Stelle sicher, dass der Pfad in Zelle A1 korrekt eingegeben ist. Andernfalls zeigt das Makro eine Fehlermeldung an.
  • Keine identischen Dateien gefunden: Überprüfe, ob die Dateinamen, das Erstelldatum und die Größe tatsächlich übereinstimmen. Das Makro sucht nach identischen Werten.
  • Falsche Datumsangaben: Das Datum wird anhand des Erstelldatums der Dateien ermittelt. Stelle sicher, dass die Dateien korrekt erstellt wurden.

Alternative Methoden

Neben VBA gibt es auch andere Möglichkeiten, um Verzeichnisse zu vergleichen:

  • PowerShell: Mit einem einfachen Skript kannst Du die Inhalte von zwei Ordnern vergleichen und Unterschiede anzeigen.
  • Drittanbieter-Tools: Programme wie „WinMerge“ oder „Beyond Compare“ bieten eine grafische Benutzeroberfläche zum Vergleichen von Verzeichnissen.
  • Windows-Bordmittel: Du kannst die Eingabeaufforderung nutzen, um mit fc (File Compare) Dateien zu vergleichen.

Praktische Beispiele

  1. Beispiel 1: Vergleiche zwei Backup-Ordner, um doppelte Dateien zu identifizieren, bevor Du überflüssige Dateien löscht.
  2. Beispiel 2: Verwende das VBA-Skript, um regelmäßig Deine Arbeitsverzeichnisse zu überprüfen und sicherzustellen, dass alle relevanten Dateien synchronisiert sind.
  3. Beispiel 3: Bei der Migration von Daten auf ein neues Laufwerk kannst Du die Ordnerinhalte vergleichen, um sicherzustellen, dass keine Dateien fehlen.

Tipps für Profis

  • Verzeichnisse mit Unterverzeichnissen vergleichen: Achte darauf, die Option für die Suche in Unterverzeichnissen zu aktivieren, um vollständige Ergebnisse zu erhalten.
  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in Deinem VBA-Skript, um Probleme bei der Ausführung schnell zu identifizieren.
  • Regelmäßige Backups: Stelle sicher, dass Du regelmäßig Sicherungskopien Deiner Daten machst und die Ordnerinhalte vergleichst, um Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich zwei Ordner miteinander vergleichen?
Du kannst VBA in Excel verwenden, um die Verzeichnisse zu vergleichen und identische Dateien aufzulisten.

2. Was mache ich, wenn das Makro nicht funktioniert?
Überprüfe die eingegebenen Pfade in den Zellen A1 und B1 und stelle sicher, dass der Verweis auf die Microsoft Scripting Runtime aktiviert ist.

3. Gibt es eine Möglichkeit, Unterschiede zwischen den Ordnern anzuzeigen?
Ja, Du kannst das VBA-Skript erweitern, um Unterschiede zwischen den Dateien anzuzeigen, indem Du die Dateigröße und das Änderungsdatum vergleichst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige