Jump to content

Mehrere Verzeichnisse und Unterverzeichnisse von der Suche ausschließen (PS)


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo nochmal,

 

ich möchte Euch jetzt wenigstens auch mal mein Ergebnis zeigen, welches als Testlauf (/L) mit Robocopy schon gut funktioniert hat.

Die zu löschenden Dateien werden mit Robocopy nicht gelöscht, sondern zunächst einfach mal in ein anderes Verzeichnis verschoben.

Dieses kann dann nochmal durchgeschaut werden... und anschließend kann das komplette Verzeichnis gelöscht werden und im orig. Verzeichnis verbleiben nur die Dateien, die dort auch gewünscht sind.

 

Über "minlad:20150101" (Minimales Datum des letztes Zugriffs) werden Dateien ausgeschlossen, die seit dem 1.01.2015 verwendet wurden.

Da war ich mir noch nicht so recht sicher, ob das für mein Vorhaben so korrekt ist. Es sollte ursprünglich ja so sein, dass alle Dateien, die zum letzten Mal vor dem Datum verwendet/verändert wurden, gelöscht werden sollen. Das muss man halt auf "minlad" umbrechen... Vielleicht könnt Ihr ja da nochmal helfen.

 

Hier mein Code:

 

@ echo off

Set Quelle="\\dasfile2\daten\Test"
Set Ziel="\\dasfile2\daten\Test3"
Set Dateien="*.xls*, *.doc*, *.wbk*, *.bak*, *.dot*"
Set Ausschluss="\\dasfile2\daten\Test\U1\UU1"
Set Log="\\dasfile2\daten\Test3\LOG.txt"

mkdir \\dasfile2\daten\Test3
robocopy.exe %Quelle% %Ziel% %Dateien% /E /MOVE /XD %Ausschluss% /minlad:20150101 /L /R:1 /W:1 /LOG+:%Log%

 

Falls Ihr noch Verbesserungsvorschläge habt - gerne!

Ansonsten werde ich den Zusatz "/L" entfernen und das Script mal durchlaufen lassen (sind ja zunächst eh mal nur Testverzeichnisse).

 

Grüße,

imebro

bearbeitet von imebro
Link zu diesem Kommentar
  • 2 Wochen später...

Hallo nochmal,

 

so - endlich habe ich mal Zeit, um die Datei wirklich zu testen.

Es sollen ja alle Excel-/Word Dokumente verschoben werden, die vor dem 1.01.2012 nicht mehr verändert wurden.

 

Dazu habe ich eine Testumgebung erstellt mit den Verzeichnissen "Test\U1\UU1" und "Test3"

Dann habe ich verschiedene Word- u. Excel-Dokumente in die Verzeichnisse kopiert, wobei manche älter sind als 1.01.2012 und manche neuer.

 

Nach Ausführen der Batchdatei befand sich im Verzeichnis "Test3" jedoch lediglich das Verzeichnis "U1", welches jedoch vollkommen leer ist.

Wieso wurden keine Dateien in die Verzeichnisse verschoben? :rolleyes:

 

Hier mal der aktuelle Code, mit dem ich es eben versucht hatte:

 

Set Quelle="\\dasfile2\daten\Test"
Set Ziel="\\dasfile2\daten\Test3"
Set Dateien="*.xls*, *.doc*, *.wbk*, *.bak*, *.dot*"
Set Ausschluss="\\dasfile2\daten\Test\U1\UU1"
Set Log="\\dasfile2\daten\Test3\LOG.txt"

robocopy.exe %Quelle% %Ziel% %Dateien% /E /MOVE /XD %Ausschluss% /minlad:20120101 /R:1 /W:1 /TEE /LOG+:%Log%

 

Dem Code nach hätten eine Menge Dateien ins Verzeichnis "Test3" verschoben werden müssen. Das Unterverzeichnis "Test1\U1\UU1" hätte so erhalten bleiben müssen, wie es war (siehe "Ausschluss").

 

Wo liegt mein Fehler?

 

Danke und schöne Grüße,

imebro

bearbeitet von imebro
Link zu diesem Kommentar

1. Deine Datei-Auswahl-Liste ist falsch formatiert ... die einzelnen Dateien oder Datei-Muster werden durch Leerzeichen getrennt - nicht durch Komma. ;-) 

2. Eine Datei hat unter Windows 3 relevante Datums-Eigenschaften. Den Zeitpunkt der Erstellung, den Zeitpunkt der letzten Änderung und den Zeitpunkt des letzten Zugriffs. Robocopy benutzt bei Verwendung der Option /minlad und /maxlad den Zeitstempel des letzten Zugriffs, welcher aber beim Kopieren aktualisiert wird. Mit Deiner Angabe /minlad:20120101 schließt Du alle Dateien aus, auf die nach dem 1. Januar 2012 zugegriffen wurde, was bei Dateien, die Du Dir zum Testen kopiert hast mit Sicherheit der Fall ist. ;-)  .... und wenn Du es bei Deinen Tests schaffst, dass eine Datei kopiert oder verschoben wird, wird das Datum des letzten Zugriffs der Quell-Datei aktualisiert!!  ;-) 

 

Davon unabhängig bietet robocopy alle möglichen Protokoll/Log - Optionen. Die solltest Du bei der Fehlersuche aktivieren.

 

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy#logging-options

 

Link zu diesem Kommentar
vor einer Stunde schrieb imebro:

Was muss ich denn - statt "/minlad" angeben, damit der Zeitpunkt der letzten Änderung berücksichtigt wird?

 

???  Das kommt darauf an, was Du erreichen möchtest. Lass Dir doch im Explorer einfach mal alle 3 relevanten Zeitstempel einblenden und spiel ein bissl mit dem Datum ...  

 

Es gibt auch Tools - sowohl für die Kommandozeile, wie auch mit grafischer Oberfläche - die alle 3 Zeitstempel individuell und unabhängig voneinander editieren können. Damit kann man sich dann Test-Dateien speziell präparieren. Falls Interesse besteht, bitte mal Deine Lieblingssuchmaschine bemühen! ;-) 

Link zu diesem Kommentar

Wenn Du wüßtest, wie lange ich schon dabei bin, meine Lieblingssuchmaschine zu bemühen.

Ich denke, dass die Datei jetzt grds. funktioniert.

Ich musste nur bei der Angabe der Dateien noch etwas Weiteres verändern. Nämlich:

 

Set Dateien="*.bak*" "*.doc*" "*.dot*" "*.wbk*" "*.xls*"

 

Jede einzelne Angabe muss wohl in Anführungsstriche gesetzt werden.

Übrigens habe ich das herausgefunden, indem ich den Auftrag mit YARCGUI erstellt habe. Wie Du siehst, habe ich auch das bereits versucht.

 

Das Ergebnis der LOG-Datei zeigt aber, dass es noch nicht funktioniert. Es wurde auch wieder lediglich ein einziges leeres Verzeichnis nach "Test3" kopiert.

Hier mal die LOG:

 

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robustes Dateikopieren für Windows                              
-------------------------------------------------------------------------------

  Gestartet: Mittwoch, 16. Februar 2022 12:14:04
   Quelle : \\dasfile2\daten\Test\
     Ziel : \\dasfile2\daten\Test3\

    Dateien : *.bak*
	    *.doc*
	    *.dot*
	    *.wbk*
	    *.xls*
	    
 Ausgeschl. Verzeichnisse: \\dasfile2\daten\Test\U1\UU1
	    
  Optionen: /TEE /S /E /DCOPY:T /COPY:DAT /MOVE /MINLAD:20120101 /R:1 /W:1 

------------------------------------------------------------------------------

	                  46	\\dasfile2\daten\Test\
	 Neues Verz.       3	\\dasfile2\daten\Test\U1\

------------------------------------------------------------------------------

           Insgesamt   KopiertÜbersprungenKeine Übereinstimmung    FEHLER    Extras
Verzeich.:         3         1         2         0         0         0
  Dateien:        49         0        49         0         0         0
    Bytes:    5.53 m         0    5.53 m         0         0         0
   Zeiten:   0:00:00   0:00:00                       0:00:00   0:00:00
   Beendet: Mittwoch, 16. Februar 2022 12:14:04

 

Wie man sieht, wurde nichts kopiert.

Ich bin sicher, dass es irgendwie mit dieser "/minlad" Angabe zu tun hat.

Aber was / wie / wo soll ich da herum probieren? :rolleyes:

 

In den Datei-Eigenschaften steht lediglich bei "Geändert:" das Datum, welches ich ansprechen möchte. Dort steht z.B. "7. August 2003".

Bei "Erstellt:" und bei "Letzter Zugriff:" steht jeweils der 7. Februar 2022. Dieses Datum darf natürlich im Code NICHT abgefragt werden.

 

Was kann ich denn anders eintragen, um zu erreichen, dass ich im Code das ÄNDERUNGSDATUM anspreche, damit alle Dateien, die vor dem 1.01.2012 nicht mehr verändert wurden, verschoben werden?

 

Grüße,

imebro

bearbeitet von imebro
Link zu diesem Kommentar
vor 16 Minuten schrieb imebro:

Jede einzelne Angabe muss wohl in Anführungsstriche gesetzt werden.

Nein. Nur wenn das Muster Leerzeichen enthält.

vor 16 Minuten schrieb imebro:

Ich bin sicher, dass es irgendwie mit dieser "/minlad" Angabe zu tun hat.

Ja.

vor 20 Minuten schrieb imebro:

In den Datei-Eigenschaften steht lediglich bei "Geändert:" das Datum, welches ich ansprechen möchte. Dort steht z.B. "7. August 2003".

Bei "Erstellt:" und bei "Letzter Zugriff:" steht jeweils der 7. Februar 2022. Dieses Datum darf natürlich im Code NICHT abgefragt werden.

 

Genau dieser Zeitstempel wird aber benutzt ... was ich auch bereits geschrieben hatte.

 

vor 31 Minuten schrieb imebro:

Was kann ich denn anders eintragen, um zu erreichen, dass ich im Code das ÄNDERUNGSDATUM anspreche, damit alle Dateien, die vor dem 1.01.2012 nicht mehr verändert wurden, verschoben werden?

Na, so viele Möglichkeiten bleiben ja nicht mehr übrig. Welche weiteren Optionen bietet robocopy denn, wenn es um das Alter von Zeitstempeln geht?

Link zu diesem Kommentar

Oh man, ich komme mir hier vor, wie in der Schule :rolleyes:

 

Wenn ich das wüßte, würde ich ja nicht fragen...

Ich habe schon seit gestern alle möglichen Optionen über Robocopy im Web gesucht und eben nicht das gefunden, was mir hier weiterhilft.

 

Z.B. gibt es noch die Optionen "/minage" und "maxage". Aber die können ja nicht die Lösung sein, da hierbei das minimale, bzw. maximale Dateialter angegeben wird - also um Dateien auszuschließen, die älter, bzw. neuer als n Tage oder Datum sind.

Älter als bezieht sich doch sicher auf das Erstellungsdatum der Datei... oder etwa nicht?

 

Also bleibt im Grunde nur "/minlad" od. "maxlad". Aber wenn - wie Du geschrieben hast - das auch nicht die richtige Option ist, dann weiß ich es auch nicht. Eine weitere passende Option habe ich bisher nicht gefunden.

Die Optionen "/COPY:DAT" sowie  "/DCOPY:T" habe ich ja bereits in meinem Code eingesetzt.

 

Grüße,

imebro

bearbeitet von imebro
Link zu diesem Kommentar
vor 17 Minuten schrieb imebro:

Oh man, ich komme mir hier vor, wie in der Schule :rolleyes:

 

 

... dazu liegt mir auch eine Bemerkung auf den Lippen ...  :aha2:

 

vor 18 Minuten schrieb imebro:

Z.B. gibt es noch die Optionen "/minage" und "maxage". Aber die können ja nicht die Lösung sein, da hierbei das minimale, bzw. maximale Dateialter angegeben wird - also um Dateien auszuschließen, die älter, bzw. neuer als n Tage oder Datum sind.

Älter als bezieht sich doch sicher auf das Erstellungsdatum der Datei... oder etwa nicht?

 

.... und was ist ja jetzt so schwer dran, das einfach mal zu probieren? ... 3 Buchstaben austauschen und die Kommandozeile nochmal ausführen kann's ja nicht sein, oder?

Link zu diesem Kommentar

Also...

scheint, als ob es funktioniert hat.

Jedenfalls wurden Dateien tatsächlich verschoben und das Verzeichnis, welches nicht angerührt werden sollte, ist auch unverändert.

 

Nur... so ganz sicher bin ich mir dennoch nicht, ob jetzt wirklich nur die Dateien verschoben wurde, die vor dem 1.01.2012 tatsächlich VERÄNDERT worden sind und nicht auch solche, die vor diesem Datum ERSTELLT wurden. Vielleicht kann ich das ja über die Datei-Eigenschaften herausfinden... nur ist das ja ein Lotteriespiel, da ich ja nicht weiß, welche Dateien ich anschauen soll :frown:

 

Ich müßte im Idealfall dann eine Datei finden, die z.B. am 10.05.2010 erstellt und am 2.01.2012 geändert wurde. Wenn diese dann NICHT verschoben wurde, läuft alles richtig (da ja nach dem 1.01.2012 geändert). Dazu müßte ich jedoch sämtliche Dateien über die Eigenschaften prüfen, was kaum möglich ist.

 

Grüße,

imebro

bearbeitet von imebro
Link zu diesem Kommentar
vor 11 Minuten schrieb imebro:

die vor dem 1.01.2012 tatsächlich VERÄNDERT worden sind und nicht auch solche, die vor diesem Datum ERSTELLT wurden.

 

Ich fürchte, dass Du das zugrunde liegende Konzept noch nicht verstanden hast. Das Erstellungsdatum einer Datei ist der Zeitpunkt in dem die Datei AN DER STELLE, WO SIE GERADE LIEGT, erzeugt wurde. Das Änderungsdatum ist wirklich das - also wann die Datei zu letzt geändert wurde - und kann durchaus auch VOR DEM ERSTELLUNGSDATUM sein. Wenn die Datei z.B. von einem anderen Ordner hier her kopiert wurde, bleibt das Änderungsdatum erhalten und das Erstellungsdatum ist das "aktuelle".

 

Du solltest Dir im Explorer mal alle 3 relevanten Daten als Spalte einblenden - das macht die Unterschiede vielleicht an der ein oder anderen Stelle offensichtlicher.

bearbeitet von BOfH_666
Link zu diesem Kommentar

Sorry, aber doch, ich habe das Konzept verstanden ;-)

 

Habe das Problem nämlich schon gelöst.

Ich habe ein Powershell-Script erstellt, mit dem ich die 3 Daten (Eigenschaften) ändern kann.

Damit habe ich einer Datei folgende Daten gegeben:

- Erstellt: 1. Mai 2010

- Geändert: 5. Januar 2012

- Letzter Zugriff: 14. August 2018

 

Normalerweise würde diese Datei gelöscht, da vor dem 1.01.2012 erstellt.

Aber da sie am 5.1.2012 verändert wurde, dürfte sie NICHT gelöscht werden, da Stichtag ja der 1.01.2012 ist.

 

Dann habe ich mein Robocopy-Script nochmal durchlaufen lassen... und siehe da... die Datei wurde korrekter Weise NICHT gelöscht :D

Also dürfte mein Script jetzt korrekt sein mit "/minage" und den anderen Einstellungen.

 

Grüße,

imebro

Link zu diesem Kommentar

Aber 2 interessante Fragen hätte ich noch:

 

1) Im Internet steht in vielen Berichten, dass man bei den Variablen neben "set" keine Anführungsstriche im Pfad angeben soll. Diese soll man dann erst im eigentlichen Robocopy-Befehl angeben (z.B. --> "%Quelle%". Ich habe es jedoch so umgesetzt, dass ich oben bei "set" die Anführungsstriche gesetzt habe und unten im eigentlichen Befehlscode nicht ( also --> %Quelle%). Offenbar funktioniert Beides. Gibt es dennoch einen Unterschied oder ist es wirklich egal, wie man es macht?

 

2) Kann ich die Optionen auch als Variable mit "set" angeben?

Z.B. so --> Set Optionen="/E /MOVE /COPY:DAT /DCOPY:T /XD /MT:12 /R:1 /W:1 /TEE"

Dann ist der eigentliche Befehlscode später übersichtlicher...

 

Grüße,

imebro

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...