staga75
Goto Top

VBS Dateien kopieren welche älter sind als xx und beginnen mit xx

Hallo Leute

ich bin neu hier und habe bereits eine Frage (hoffe doch das Ihr mir das nicht übel nehmt). Nach langer Suche im Forum und im Internet (leider nichts gefunden) poste ich hier meine Frage. Ich bin was VBS betrifft ein absoluter Anfänger daher bitte ich um Rücksicht sollte meine Frage zu lächerlich sein.

Also ich habe per Vorlage ein Script erstellt welches mir alle Dateien in einem Ordner die älter sind als xx Tage in einen anderen Ordner verschiebt (funktioniert sogarface-wink). Nun möchte ich zusätzlich die Funktion einbaue das nur Dateien verschoben werden welche mit einer bestimmten Zeichenfolge beginnen (z.B. 4052test*.*). Ergo es werden Dateien verschoben welche älter sind als xx Tage und beginnen mit 4052test*.*

Ich wäre dankbar wenn mir jemand weiterhelfen kann. Anbei noch das Script welches erweitert werden soll:

Script:
Dim fso, files, file, datei
datei=date-2
Set fso = CreateObject ("scripting.FileSystemObject")  
set files = fso.getFolder("C:\Temp\test1").files  
For Each file In files
if file.datelastmodified < datei Then
fso.MoveFile file, "C:\Temp\test2\"   
End If
next
gruss Staga


[Edit Biber] Codeformatiert [/Edit]

Content-Key: 177666

Url: https://administrator.de/contentid/177666

Printed on: April 25, 2024 at 15:04 o'clock

Member: bastla
bastla Dec 14, 2011 at 08:53:19 (UTC)
Goto Top
Hallo staga75 und willkommen im Forum!

Zwei Tipps vorweg:
  • Der Variablennamen "datei" ist als Bezeichnung für einen Datumswert eher irreführend (besser wäre etwa "Vergleichsdatum").
  • Wenn Du Deinen Code etwas formatierst (damit ist nicht nur die forumseigene ), sondern vor allem die Verwendung von Einrückungen gemeint, ist er (auch für Dich) besser lesbar.

Das Ergebnis könnte dann so aussehen:
Option Explicit
Dim fso, files, file, Vergleichsdatum
Vergleichsdatum = Date - 2

Set fso = CreateObject ("scripting.FileSystemObject")  
Set files = fso.GetFolder("C:\Temp\test1").Files  
For Each file In files
    If file.datelastmodified < datei Then
        If Left(file.Name, 8) = "4052test" Then  
            fso.MoveFile file, "C:\Temp\test2\"  
        End If
    End If
Next
Wartbarer wird's noch, wenn Du den Suchstring (und dessen Länge) sowie die Ordner vorweg festlegst:
Option Explicit
Dim fso, files, file, Vergleichsdatum, Quelle, Suchstring, Ziel, SL
Quelle = "C:\Temp\test1"  
Suchstring = "4052test"  
Ziel = "C:\Temp\test2\"  
Vergleichsdatum = Date - 2

SL = Len(Suchstring)
Set fso = CreateObject ("scripting.FileSystemObject")  
Set files = fso.GetFolder(Quelle).Files
For Each file In files
    If file.datelastmodified < datei Then
        If Left(file.Name, SL) = Suchstring Then
            fso.MoveFile file, Ziel
        End If
    End If
Next
Zu beachten wäre, dass Groß-/Kleinschreibung im Suchstring berücksichtigt werden - dem ließe sich so:
Suchstring = LCase("4052test")
und
        If LCase(Left(file.Name, SL)) = Suchstring Then
beikommen - Alternative: Verwendung von "StrComp()"

Grüße
bastla
Member: staga75
staga75 Dec 14, 2011 at 09:22:36 (UTC)
Goto Top
Hallo bastla

Ich bedanke mich für die Hinweise wie auch für das Script. Man lernt eben immer dazu. Habe die Anpassungen bereits vorgenommen und es funktioniert wunderbar.

Vielen Dank für die schnelle Hilfeleistung

gruss
Staga
Member: staga75
staga75 Dec 14, 2011 at 09:36:05 (UTC)
Goto Top
Hallo bastla

Noch eine kleine Frage (habe vergessen das noch ein weiterer Copy befehl dazukommt):

Nachdem die Dateien ins Test2 Verzeichnis kopiert wurden würde ich gerne alle Dateien welche mit dem Namen 4052test* beginnen und die Endung .xml haben ins Verzeichnis Test3 kopieren.

Mit dem Befehl:
If left(file.Name, 6) = "1033603*.xml* Then
fso.CopyFile file, "C:\Temp\test3\"

funktioniert das nicht.

Vielleicht kannst du mir nochmals helfen.

Danke
Staga
Member: Biber
Biber Dec 14, 2011 at 10:08:22 (UTC)
Goto Top
Moin staga75,

ich will mich ja nicht einmengen, aber....

Zitat von @staga75:
Nachdem die Dateien ins Test2 Verzeichnis kopiert wurden würde ich gerne alle Dateien welche mit dem Namen 4052test* beginnen
und die Endung .xml haben ins Verzeichnis Test3 kopieren.

Mit dem Befehl:
If left(file.Name, 6) = "1033603*.xml* Then
fso.CopyFile file, "C:\Temp\test3\"

funktioniert das nicht.

Ööööhm......

Aus aktuellem Anlass:
Lass dir nicht auf irgendwelchen Weihnachtsmärkten von Fremden irgendwelche Umsonst-Glühweine aufdrängen.
Die können unerwartet krasse Nebenwirkungen haben.

Grüße
Biber
Member: bastla
bastla Dec 14, 2011 at 10:12:13 (UTC)
Goto Top
Hallo staga75!

Es gäbe auch ein "Right()" oder, besser, "fso.GetExtensionName(file.Name)" ...

... und die Angabe der Zeichenanzahl - sowohl in "Left()" wie in "Right()" - ist tatsächlich ernst gemeint ... face-wink

Grüße
bastla
Member: staga75
staga75 Dec 14, 2011 at 10:25:03 (UTC)
Goto Top
Hallo

Also das mit der Funktion fso.GetExtensionName(filename) = "XML" habe ich bereits gefunden, danke. Jedoch kann ich die Funktion nicht einbauen. Ich habe einfach zu wenig VB Kentnisse

Der Ablauf sollte so aussehen:
Dateien von test1 die älter sind als 2 Tage und beginnen mit 4025test werden kopiert in den Ordner test2 (funktioniert ja soweit). Danach sollen alle Dateien welche älter sind als 2 Tage, beginnen mit 4025test und die Endung "XML" haben vom Ordner Test2 in den Ordner Test3 kopiert werden.

gruss
Staga
Member: staga75
staga75 Dec 14, 2011 at 10:40:44 (UTC)
Goto Top
Nachtrag: Ich habe das Script angepasst jedoch geht das so nicht. Es erscheint immer ein Fehler bei der Ausführung bei der Linie 14.

Script:
Dim fso, files, file, datei, Suchstring, SL
Suchstring="103360"  
datei=date-2
SL = Len(Suchstring)
Set fso = CreateObject ("scripting.FileSystemObject")  
set files = fso.getFolder("C:\Temp\test1").files  
For Each file In files
if file.datelastmodified < datei Then
If Left(file.Name, 6) = "103360" Then  
fso.CopyFile file, "C:\Temp\test2\"  
End If
End If
next
Dim fso, files, file, datei, Suchstring, SL
Suchstring="103360"  
datei=date-2
SL = Len(Suchstring)
Set fso = CreateObject ("scripting.FileSystemObject")  
set files = fso.getFolder("C:\Temp\test2").files  
For Each file In files
if file.datelastmodified < datei Then
If Left(file.Name, 6) = "103360" And fso.GetExtensionName(filename) = "XML" Then  
fso.CopyFile file, "C:\Temp\test3\"  
End If
End If
next
Member: bastla
bastla Dec 14, 2011 at 10:44:25 (UTC)
Goto Top
Hallo staga75!

Hinsichtlich der Zeile 14 gibt es eine einfache Lösung: Lass sie weg ... face-wink

Grüße
bastla
Member: staga75
staga75 Dec 14, 2011 at 12:57:25 (UTC)
Goto Top
Danke für den Hinweis. Funktioniert tip top.

gruss
Staga