Zum Inhalt wechseln


Foto

VBS: Nur Dateien älter 5 Minuten in einem Ordner verarbeiten


  • Bitte melde dich an um zu Antworten
8 Antworten in diesem Thema

#1 monstermania

monstermania

    Board Veteran

  • 1.201 Beiträge

 

Geschrieben 28. Februar 2017 - 07:40

Folgendes Problem.

In einem Ordner befinden sich rund 9000 CSV-Dateien (Anzahl weiter steigend).

Ich will nur all die CSV-Dateien herausfinden, die in der letzten Stunde neu erstellt wurden.

 

An sich kein Problem, aber durch die schiere Anzahl der Dateien im Ordner wird es so langsam zu einem Problem. Bereits jetzt benötigt ein Durchlauf über 10 Minuten.

Das Problem, ist, dass das Script halt jede Datei im Order prüfen muss...

For Each sFile In sFolder.Files

Gibt es eine Möglichkeit per VBS die Dateien nach Datum vorzufiltern, so dass z.B. nur Dateien überprüft werden, die z.B. aus dem aktuellen Jahr sind?

 

Gruß

Dirk

 



#2 BOfH_666

BOfH_666

    Junior Member

  • 147 Beiträge

 

Geschrieben 28. Februar 2017 - 07:58

Ginge auch Powershell?

$Limit = Get-Date '01.01.2017'
Get-ChildItem -Path 'C:\sample' -Filter '*.csv' | Where-Object -Property LastWriteTime -Value $Limit -GE

live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#3 NilsK

NilsK

    Expert Member

  • 12.458 Beiträge

 

Geschrieben 28. Februar 2017 - 07:59

Moin,

 

sFile.DateCreated

sFile.DateLastAccessed

sFile.DateLastModified

 

Sinnvoller wäre allerdings das Präfix o, weil du ja keine Strings, sondern Objekte am Wickel hast.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#4 Sanches

Sanches

    Newbie

  • 434 Beiträge

 

Geschrieben 28. Februar 2017 - 08:04

Moin,

 

 

In einem Ordner befinden sich rund 9000 CSV-Dateien (Anzahl weiter steigend).

Ich will nur all die CSV-Dateien herausfinden, die in der letzten Stunde neu erstellt wurden.

 

Müssen die 9000 Dateien im Ordner für weitere Aktionen bestehen bleiben oder könnten die Daten nach deiner Verarbeitung ggf. in eine Art Archivordner verschoben werden?

 

Gruß Sebastian



#5 Cybquest

Cybquest

    Expert Member

  • 1.888 Beiträge

 

Geschrieben 28. Februar 2017 - 08:12

Muss es VBS sein?

Mit Powershell ginge z.B. sowas

$items = Get-ChildItem -Path C:\MeinPfad | Where{$_.CreationTime -ge (Get-Date).AddMinutes(-60)}
$items

da kommt bei mir bei nem Verzeichnis mit 30000 Dateien nach rd. 4 Sekunden ein Ergebnis!

 

$items kann natürlich hinterher mit "For-Each" etc. weiterverarbeitet werden ;-)

 

...Hoppla... zu langsam ;-)


Bearbeitet von Cybquest, 28. Februar 2017 - 08:13.

My name is Frank, you can say you to me.

#6 BOfH_666

BOfH_666

    Junior Member

  • 147 Beiträge

 

Geschrieben 28. Februar 2017 - 09:34

.... und noch mal eine Verständnis-Nachfrage von mir: Im Betreff fragst Du nach Dateien, die älter sind als 5 Minuten. Dann fragst Du nach Dateien, die in der letzten Stunde neu erstellt wurden und am Schluss fragst Du nach Dateien, die z.B. aus dem aktuellen Jahr sind.   :)  :D  ;)  :schreck:   Vielleicht solltest Du die erwünschten Rahmenbedingungen erst mal konkret festlegen!? :cool:


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#7 Dukel

Dukel

    Board Veteran

  • 9.308 Beiträge

 

Geschrieben 28. Februar 2017 - 10:48

Wenn sowas richtig Zeitkritisch ist dann wäre evtl. eine alternative eine Datenbank parallel zu führen und bei Dateiänderungen diese Datenbank zu pflegen (siehe z.B.: http://openbook.rhei...rp_20_003.htm).Wenn du die Daten dann brauchst ist ein Select schneller als alle Dateien abzufragen.


Stop making stupid people famous.


#8 monstermania

monstermania

    Board Veteran

  • 1.201 Beiträge

 

Geschrieben 28. Februar 2017 - 14:12   Lösung

@all

Danke

 

Nein, PS ist keine Option (zumindest noch nicht :rolleyes: ).

 

Kurz zur Erklärung was das Script macht bzw. machen soll.

Ein Prüfstand erzeugt Protokolle (Diagramm als PDF- und Messwerte als CSV-Dateien). Diese werden vom Prüfstand automatisch in einem Ordner abgelegt.

Aufgabe ist, für jedes Protokoll ein Formular (PDF) zu erzeugen, was an den Kunden geschickt wird. Dazu wird eine Word-Fomularvorlage mit den Werten aus der CSV-Datei und einem ERP-System (SQL-db) verknüpft/gefüllt und als Endabnahmeprotokoll als PDF gespeichert bzw. gedruckt.

 

Mein eigentliches Problem war ja schlichtweg die Anzahl der CSV-Dateien im Ordner. Jeder Durchlauf des Scripts durch den Ordner braucht(e) mehr als 10 Minuten und dann kam im schlimmsten Fall gar nichts heraus, weil seit dem letzten Durchlauf gar keine neuen Prüfstandtests gemacht wurden! Und außerdem hat es immer mindestens die Zeit gebraucht, bis wieder ein Durchlauf gestartet werden kann...

 

Eine "Lösung" für mein Problem zu finden war recht einfach. Ein simples 'xcopy quelle ziel /d:mm-dd-yyyy /y' im Script kopiert alle csv-Dateien => dem aktuellen Datum in ein Importverzeichnis. Das sind dann nur wenige Dateien am Tag.

Darauf läuft dann erste meine VBS-Programmierung los.

Da die verarbeiteten CSV-Dateien anschließend eh in einer Datenbank erfasst werden, ist es kein Problem die bereits beim letzten Durchlauf verarbeiteten CSV-Dateien aus dem Importordner zu löschen, ohne das ein Endabnahmeprotokoll erzeugt wird.

Vielleicht nicht unbedingt die eleganteste Lösung, aber zumindest eine ohne viel Aufwand.  :D

Insgesamt braucht das Script jetzt nur ein paar Sekunden... 



#9 NilsK

NilsK

    Expert Member

  • 12.458 Beiträge

 

Geschrieben 28. Februar 2017 - 14:28

Moin,

 

OK, prima, danke für die Rückmeldung.

 

An diesem Thread lässt sich übrigens sehr schön erkennen, warum es sinnvoll ist, auch die Hintergründe einer Frage anzugeben. Hätten wir gewusst, was du eigentlich willst, wäre mit Sicherheit ein Lösungsvorschlag in dieser Richtung bei der ersten oder zweiten Antwort gekommen. Stattdessen haben wir gestochert und uns mit der Detailfrage beschäftigt, die am Ende gar nicht gelöst werden musste.

 

Aber gut, dass es jetzt klappt.

 

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!