Per Script Dateien aus verschiedenen Verzeichnissen zusammensuchen
Moin,
der Titel sagt schon einiges aus. Ich möchte aus allen Unterverzeichnissen unter z.B. d:\daten\ alle Dateien in ein Verzeichnis kopieren wo diese dann weiter verarbeitet werden.
Die Herausforderung bei der Sache ist, dass die Daten im Zielverzeichnis nach der eigentlichen Verarbeitung gelöscht werden, aber trotzdem nicht wieder neu aus dem Quellverzeichnis geholt werden dürfen.
Hat jemand eine Idee, wie man das realisieren kann?
Das einzige, was mir einfällt wäre ein kleiens Tool, z.B. in VB, das die schon einmal kopierten Daten in einer Textdatei dokumentiert und beim nächsten Durchlauf damit abgleicht.
Ich würde es aber lieber mit einer Batch lösen zumal der Abgleich mit einer Textdatei mit der Zeit extrem langsam werden könnte.
der Titel sagt schon einiges aus. Ich möchte aus allen Unterverzeichnissen unter z.B. d:\daten\ alle Dateien in ein Verzeichnis kopieren wo diese dann weiter verarbeitet werden.
Die Herausforderung bei der Sache ist, dass die Daten im Zielverzeichnis nach der eigentlichen Verarbeitung gelöscht werden, aber trotzdem nicht wieder neu aus dem Quellverzeichnis geholt werden dürfen.
Hat jemand eine Idee, wie man das realisieren kann?
Das einzige, was mir einfällt wäre ein kleiens Tool, z.B. in VB, das die schon einmal kopierten Daten in einer Textdatei dokumentiert und beim nächsten Durchlauf damit abgleicht.
Ich würde es aber lieber mit einer Batch lösen zumal der Abgleich mit einer Textdatei mit der Zeit extrem langsam werden könnte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135130
Url: https://administrator.de/contentid/135130
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
7 Kommentare
Neuester Kommentar
Um wieviele Dateien geht es denn?
Les doch die vom Zielordner Verzeichnisstruktur ein und leg dir die Struktur in einer Textdatei ab.
Danach liest du die Struktur vom Quellordner und kopierst nur die die beim Diff übrigbleiben.
Nach dem Kopieren aktualisierst du die Strukturdatei des Zielordners wieder und fährst analog mit dem nächsten Quellordner fort.
Les doch die vom Zielordner Verzeichnisstruktur ein und leg dir die Struktur in einer Textdatei ab.
Danach liest du die Struktur vom Quellordner und kopierst nur die die beim Diff übrigbleiben.
Nach dem Kopieren aktualisierst du die Strukturdatei des Zielordners wieder und fährst analog mit dem nächsten Quellordner fort.
Hallo morpheus31337!
Eventuell, könnte man bei den bereits kopierten Dateien einfach nur das Archiv-Attribut löschen?
Gruß Dieter
Eventuell, könnte man bei den bereits kopierten Dateien einfach nur das Archiv-Attribut löschen?
Gruß Dieter
Hallo morpheus31337!
Also, ich habe mal ein kleines VB-SKript (*.vbs) zum testen gebastelt.
Das Skript erstellt/ersetzt in jedem Unterordner, in denen die zu kopierende Dateien stehen, eine Log-Datei mit der Erstellungszeit (Speicherzeit auf Datenträger) der zuletzt erstellten kopierten Datei im DateTime-Format "04.02.2010 19:14:23". D.h. beim starten des Skripts werden alle Dateien, die sich aktuell im Ordner befinden, mit der zuletzt gespeicherten Erstellungszeit in der Logfile verglichen und die Dateien, die nach dieser Zeit gespeichert wurden, in den Kopie-Ordner kopiert und die Erstellungszeit der zuletzt gespeicherten Datei wieder in die Log-Datei geschrieben. Sofern die Neu dazukommende Dateien nicht im Sekundentakt gespeichert werden, sollte das eigentlich funktionieren.
Das Skript muss sich im Haupt-Ordner "..\Test\Daten" befinden, wobei das Skript den Speicherort automatisch ermittelt und alle Unter-Ordner (1. Ebene) in diesem Ordner ausliest und die darin befindlichen Datei entsprechend kopiert. Der Kopie-Ordner darf sich logischerweise nicht in der Ordnerstruktur von "..\Test\Daten" befinden. Beispiel wäre hier "..\Test\Kopien\".
Die Konstanten entsprechend anpassen (Backslash LogFile am Anfang und CopyFolder am Ende beachten):
Gruß Dieter
Zitat von @chb1982:
das bringt dann aber leider die Datensicherung durcheinander. Ausserdem ist mir das zu unischer wenn aus irgendwelchen
Gründen das Bit wieder gesetzt wird und er nochmal über alle Dateien fegt...
War nur eine Möglichkeit mit Fragezeichendas bringt dann aber leider die Datensicherung durcheinander. Ausserdem ist mir das zu unischer wenn aus irgendwelchen
Gründen das Bit wieder gesetzt wird und er nochmal über alle Dateien fegt...
Ich würde es aber lieber mit einer Batch lösen zumal der Abgleich mit einer Textdatei mit der Zeit extrem langsam werden könnte.
Gerade dann sollte es mit VBS wesentlich schneller gehenAlso, ich habe mal ein kleines VB-SKript (*.vbs) zum testen gebastelt.
Das Skript erstellt/ersetzt in jedem Unterordner, in denen die zu kopierende Dateien stehen, eine Log-Datei mit der Erstellungszeit (Speicherzeit auf Datenträger) der zuletzt erstellten kopierten Datei im DateTime-Format "04.02.2010 19:14:23". D.h. beim starten des Skripts werden alle Dateien, die sich aktuell im Ordner befinden, mit der zuletzt gespeicherten Erstellungszeit in der Logfile verglichen und die Dateien, die nach dieser Zeit gespeichert wurden, in den Kopie-Ordner kopiert und die Erstellungszeit der zuletzt gespeicherten Datei wieder in die Log-Datei geschrieben. Sofern die Neu dazukommende Dateien nicht im Sekundentakt gespeichert werden, sollte das eigentlich funktionieren.
Das Skript muss sich im Haupt-Ordner "..\Test\Daten" befinden, wobei das Skript den Speicherort automatisch ermittelt und alle Unter-Ordner (1. Ebene) in diesem Ordner ausliest und die darin befindlichen Datei entsprechend kopiert. Der Kopie-Ordner darf sich logischerweise nicht in der Ordnerstruktur von "..\Test\Daten" befinden. Beispiel wäre hier "..\Test\Kopien\".
Die Konstanten entsprechend anpassen (Backslash LogFile am Anfang und CopyFolder am Ende beachten):
Const FileTyp = "txt" 'Nur Textdateien
Const LogFile = "\LastFile.Log" 'Zeit der zuletzt erstellten Datei
Const CopyFolder = "C:\Test\Kopien\" 'Pfad der Kopie-Dateien
Dim Fso, Path, SubFolder, File, Log, OldTime, NewTime
Set Fso = CreateObject("Scripting.FileSystemObject")
Path = Fso.GetParentFolderName(WScript.ScriptFullName)
OldTime = CDate("01.01.1980")
NewTime = CDate("01.01.1980")
For Each SubFolder In Fso.GetFolder(Path).SubFolders
Log = SubFolder & LogFile
If Fso.FileExists(Log) Then OldTime = CDate(Fso.OpenTextFile(Log).ReadLine)
For Each File In SubFolder.Files
If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileTyp) Then
If File.DateCreated > NewTime Then NewTime = File.DateCreated
If File.DateCreated > OldTime Then Fso.CopyFile File.Path, CopyFolder
End If
Next
Set File = Fso.CreateTextFile(Log): File.WriteLine NewTime: File.Close
Next
Gruß Dieter
Hallo,
der Beitrag ist zwar schon ziemlich alt jedoch hat er mir damals weitergeholfen.
Kann man das erste Skript auch so umbauen, dass es noch auf eine weitere Ebene an Unterodnern zugreift.
Sprich:
Hauptverzeichnis mit Skript
- Unterordner 1
-- mehrere Unterordner mit den *.txt Dateien
- Unterordner 2
-- mehrere Unterordner mit den *.txt Dateien
Vorher war es ja so:
Hauptverzeichnis mit Skript
- mehrere Unterordner mit den *.txt Dateien
Danke für die Hilfe,
Sirius2002
der Beitrag ist zwar schon ziemlich alt jedoch hat er mir damals weitergeholfen.
Kann man das erste Skript auch so umbauen, dass es noch auf eine weitere Ebene an Unterodnern zugreift.
Sprich:
Hauptverzeichnis mit Skript
- Unterordner 1
-- mehrere Unterordner mit den *.txt Dateien
- Unterordner 2
-- mehrere Unterordner mit den *.txt Dateien
Vorher war es ja so:
Hauptverzeichnis mit Skript
- mehrere Unterordner mit den *.txt Dateien
Danke für die Hilfe,
Sirius2002