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

Dateien anhand Liste löschen ....

Forumthread: Dateien anhand Liste löschen ....

Dateien anhand Liste löschen ....
19.12.2005 18:28:55
Thomas
Hallo!
Ich betreibe einen Online-Shop und in diesem Shop habe ich im Laufe der Zeit ca. 20.000 Artikel importiert... Dazu habe ich auch per FTP die Bilder hochgeladen, leider sind das mitlerweise 65.000 Stück also zuviele!
Kennt jemand eine Möglichkeit, wenn ich die Dateinamen in einer Excel - Spalte habe und in einem Verzeichnis die passenden Bilddateien,wie man dann per VBA die NICHT in der Liste enthaltenen Dateien löschen kann?
Danke für eure Hilfe
Thomas ...
P.S.: Für die Frage: "Warum machst Du das nicht der Script online?"
... diese Funktion bietet mein Shop, aber bei 65000 Bildern ging jeder Server in die Knie und mit einer localen Installation passierte das gleiche ...
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien anhand Liste löschen ....
ransi
hallo thomas
stehen die dateien mit kompletter pfadangabe in der tabelle?
Wenn nein, wie ist der pfad?
ransi
AW: Dateien anhand Liste löschen ....
19.12.2005 19:31:02
Thomas
Hallo Ransi!
Über eine Verkettung kann ich den Dateien jeweils den kompletten Pfad zuweisen, das wäre desshalb sogar besser, das sich die Bilder in 4 unterschiedlichen Verzeichnissen
befinden (Bild-icon / Bild-thumb ...)
Spalte A wäre dann der Pfad, Spalte B der Dateiname und Spalte C wäre dann die Verkettung ...
Hilft das wieter?
Schönen Gruß
Thomas
Anzeige
AW: Dateien anhand Liste löschen ....
ransi
hallo
versuchs mal so:


Option Explicit
Public Sub test()
    const pfad='oberstes verzeichniss
    Dim gefunden
With Application.FileSearch
    .NewSearch
    .LookIn = pfad
    .SearchSubFolders = True
    .Filename = "*"
    .Execute
   For Each gefunden In .FoundFiles
        If WorksheetFunction.CountIf(Range("C:C"), gefunden) = 0 Then Kill (gefunden)
   Next
End With
End Sub


mach dir aber erst ne sicherheitskopie von dem Ordner.
Kill() löscht ohne Gnade und ohne Papierkorb.
ransi
Anzeige
AW: Dateien anhand Liste löschen ....
20.12.2005 14:40:47
Thomas
Hallo Ransi!
Also wenn ich das so eingebe:
Public

Sub test()
const pfad='C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0
Dim gefunden
With Application.FileSearch
.NewSearch
.LookIn = pfad
.SearchSubFolders = True
.Filename = "*"
.Execute
For Each gefunden In .FoundFiles
If WorksheetFunction.CountIf(Range("C:C"), gefunden) = 0 Then Kill (gefunden)
Next
End With
End Sub

... dann bekomme ich eine Fehlermeldung ... Syntax ...
Folgende Tests habe ich dann gamacht:
' gelöscht oder ' dahinter oder /statt\ ... hatt aber alles nix genützt
Was habe ich denn falsch gemacht? (Ich habe in Spalte C nur den Dateinamen stehen, wird da doch noch der Pfad benötigt?)
Ach und noch eine Frage:
Löscht diese Abrage die Dateien die in der Liste stehen oder die nicht in der Liste stehen, denn die Liste in Spalte C beinhaltet alle Dateinamen die benötigt werden ...
Anzeige
AW: Dateien anhand Liste löschen ....
20.12.2005 15:00:29
Beverly
Hi,
wie hast du den Dateinamen geschrieben? Evtl. fehlt da bloß die Dateiendung JPG oder so.
Bis später
Karin
AW: Dateien anhand Liste löschen ....
20.12.2005 16:45:06
Thomas
... leider nein, die Endungen der Dateinamen sind dran ...
Gruß
Thomas
AW: Dateien anhand Liste löschen ....
ransi
hallo thomas
setz den Pfad mal in anführungsstriche
const pfad="C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0"
in spalte C stehen jetzt also die dateinamen mit vollständiger Pfadangabe?
Also sowas ähnliches wie:
C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0\bild1.jpg ?
wenn das so ist müsste das hier laufen.

Sub test()
const pfad="C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0"
Dim gefunden
With Application.FileSearch
.NewSearch
.LookIn = pfad
.SearchSubFolders = True
.Filename = "*"
.Execute
For Each gefunden In .FoundFiles
If WorksheetFunction.CountIf(Range("C:C"), gefunden) = 0 Then Kill (gefunden)
Next
End With
End Sub

wenn in spalte C nur die namen der dateien mit endung liegen sollte das hier gehen:

Sub test()
const pfad="C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0"
Dim gefunden
With Application.FileSearch
.NewSearch
.LookIn = pfad
.SearchSubFolders = True
.Filename = "*"
.Execute
For Each gefunden In .FoundFiles
If WorksheetFunction.CountIf(Range("C:C"), dir(gefunden)) = 0 Then Kill (gefunden)
Next
End With
End Sub

das makro soll die löschen die NICHT in Spalte C aufgeführt sind.
Aber wie ich schon schrieb.
Lass das ganze erst mal mit sicherheitskopien laufen.
ransi
Anzeige
AW: Dateien anhand Liste löschen ....
31.12.2005 11:16:16
Thomas
DANKE für die super Hilfe !
Das Script hat nun super geklappt und mir ca. 50% Serverplatz freigemacht!
DANKE
Thomas
Anzeige
Anzeige

Infobox / Tutorial

Dateien anhand Liste löschen: Ein praktischer Leitfaden


Schritt-für-Schritt-Anleitung

  1. Vorbereitung der Excel-Datei:

    • Erstelle eine Excel-Datei, in der die Dateinamen in Spalte C stehen. Diese Liste sollte die Dateiendungen (z.B. .jpg) enthalten.
    • Optional: In Spalte A kannst du den Pfad zu den Bildern und in Spalte B den reinen Dateinamen speichern.
  2. VBA-Editor öffnen:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Neues Modul einfügen:

    • Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  4. VBA-Code einfügen:

    • Kopiere den folgenden VBA-Code und füge ihn in das Modul ein:
    Sub test()
       Const pfad = "C:\Programme\AppServ\www\oxid3\out\oxbaseshop\html\0\dyn_images\0"
       Dim gefunden
       With Application.FileSearch
           .NewSearch
           .LookIn = pfad
           .SearchSubFolders = True
           .Filename = "*"
           .Execute
           For Each gefunden In .FoundFiles
               If WorksheetFunction.CountIf(Range("C:C"), Dir(gefunden)) = 0 Then Kill (gefunden)
           Next
       End With
    End Sub
  5. Code anpassen:

    • Stelle sicher, dass der pfad zu den Bildern korrekt ist und in Anführungszeichen steht.
  6. Sicherheitskopie erstellen:

    • Bevor du das Skript ausführst, erstelle eine Sicherheitskopie des Verzeichnisses, um Datenverlust zu vermeiden.
  7. Makro ausführen:

    • Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehlermeldung bei Syntax:

    • Stelle sicher, dass der Pfad in Anführungszeichen steht. Beispiel: Const pfad = "C:\Pfad\zu\deinen\Dateien".
  • Dateien werden nicht gelöscht:

    • Überprüfe, ob die Dateinamen in Spalte C korrekt sind und die Endungen stimmen (z.B. .jpg, .png).
  • Falsche Dateiendungen in der Liste:

    • Achte darauf, dass die Dateiendungen der Liste übereinstimmen mit den tatsächlichen Dateiendungen im Verzeichnis.

Alternative Methoden

  • PowerShell: Du kannst auch ein PowerShell-Skript verwenden, um Dateien anhand einer Liste zu löschen. Dies kann besonders nützlich sein, wenn du keine VBA-Kenntnisse hast.

  • Drittanbieter-Tools: Es gibt verschiedene Softwarelösungen, die das Löschen von Dateien anhand einer Liste unterstützen. Recherchiere nach Tools, die für deinen Anwendungsfall geeignet sind.


Praktische Beispiele

  1. Beispiel für einen Dateipfad:

    • Wenn deine Dateien in C:\Bilder\ gespeichert sind, erstelle die Liste in Excel mit vollständigen Pfadangaben, z.B. C:\Bilder\bild1.jpg.
  2. Testlauf vor dem Löschen:

    • Du kannst einen Testlauf machen, indem du die Kill-Zeile in einen Debug.Print-Befehl änderst, um zu sehen, welche Dateien gelöscht werden würden.
    Debug.Print gefunden

Tipps für Profis

  • Verwendung von Variablen: Verwende Variablen für den Pfad und andere wiederkehrende Werte, um deinen Code übersichtlicher zu gestalten.

  • Logging: Implementiere ein einfaches Logging-System, um nachzuvollziehen, welche Dateien gelöscht wurden. Speichere die Dateinamen in einer separaten Textdatei.

  • Regelmäßige Wartung: Führe diesen Prozess regelmäßig durch, um deinen Serverplatz effizient zu verwalten und deine Dateien anhand der Liste aktuell zu halten.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass keine wichtigen Dateien gelöscht werden? Stelle sicher, dass die Liste in Spalte C alle benötigten Dateinamen korrekt enthält. Teste den Code zuerst mit Debug.Print, bevor du das eigentliche Löschen durchführst.

2. Welche Excel-Version benötige ich für den VBA-Code? Der VBA-Code sollte in den meisten modernen Excel-Versionen (z.B. Excel 2010 und höher) funktionieren. Achte darauf, dass Makros aktiviert sind.

3. Was passiert, wenn ich einen Fehler im Pfad habe? Wenn der Pfad falsch ist, wird das Skript keine Dateien finden. Überprüfe den Pfad auf Schreibfehler und stelle sicher, dass er korrekt angegeben ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige