Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung VB for Applications

Mitglied: staga75

staga75 (Level 1) - Jetzt verbinden

14.12.2011, aktualisiert 11:04 Uhr, 4304 Aufrufe, 9 Kommentare

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 sogar). 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:
01.
Dim fso, files, file, datei 
02.
datei=date-2 
03.
Set fso = CreateObject ("scripting.FileSystemObject") 
04.
set files = fso.getFolder("C:\Temp\test1").files 
05.
For Each file In files 
06.
if file.datelastmodified < datei Then 
07.
fso.MoveFile file, "C:\Temp\test2\"  
08.
End If 
09.
next
gruss Staga


[Edit Biber] Codeformatiert [/Edit]
Mitglied: bastla
14.12.2011 um 09:53 Uhr
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 Formatierungsmöglichkeit), sondern vor allem die Verwendung von Einrückungen gemeint, ist er (auch für Dich) besser lesbar.

Das Ergebnis könnte dann so aussehen:
01.
Option Explicit 
02.
Dim fso, files, file, Vergleichsdatum 
03.
Vergleichsdatum = Date - 2 
04.
 
05.
Set fso = CreateObject ("scripting.FileSystemObject") 
06.
Set files = fso.GetFolder("C:\Temp\test1").Files 
07.
For Each file In files 
08.
    If file.datelastmodified < datei Then 
09.
        If Left(file.Name, 8) = "4052test" Then 
10.
            fso.MoveFile file, "C:\Temp\test2\" 
11.
        End If 
12.
    End If 
13.
Next
Wartbarer wird's noch, wenn Du den Suchstring (und dessen Länge) sowie die Ordner vorweg festlegst:
01.
Option Explicit 
02.
Dim fso, files, file, Vergleichsdatum, Quelle, Suchstring, Ziel, SL 
03.
Quelle = "C:\Temp\test1" 
04.
Suchstring = "4052test" 
05.
Ziel = "C:\Temp\test2\" 
06.
Vergleichsdatum = Date - 2 
07.
 
08.
SL = Len(Suchstring) 
09.
Set fso = CreateObject ("scripting.FileSystemObject") 
10.
Set files = fso.GetFolder(Quelle).Files 
11.
For Each file In files 
12.
    If file.datelastmodified < datei Then 
13.
        If Left(file.Name, SL) = Suchstring Then 
14.
            fso.MoveFile file, Ziel 
15.
        End If 
16.
    End If 
17.
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
Bitte warten ..
Mitglied: staga75
14.12.2011 um 10:22 Uhr
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
Bitte warten ..
Mitglied: staga75
14.12.2011 um 10:36 Uhr
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
Bitte warten ..
Mitglied: Biber
14.12.2011 um 11:08 Uhr
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
Bitte warten ..
Mitglied: bastla
14.12.2011 um 11:12 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: staga75
14.12.2011 um 11:25 Uhr
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
Bitte warten ..
Mitglied: staga75
14.12.2011 um 11:40 Uhr
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:
01.
Dim fso, files, file, datei, Suchstring, SL 
02.
Suchstring="103360" 
03.
datei=date-2 
04.
SL = Len(Suchstring) 
05.
Set fso = CreateObject ("scripting.FileSystemObject") 
06.
set files = fso.getFolder("C:\Temp\test1").files 
07.
For Each file In files 
08.
if file.datelastmodified < datei Then 
09.
If Left(file.Name, 6) = "103360" Then 
10.
fso.CopyFile file, "C:\Temp\test2\" 
11.
End If 
12.
End If 
13.
next 
14.
Dim fso, files, file, datei, Suchstring, SL 
15.
Suchstring="103360" 
16.
datei=date-2 
17.
SL = Len(Suchstring) 
18.
Set fso = CreateObject ("scripting.FileSystemObject") 
19.
set files = fso.getFolder("C:\Temp\test2").files 
20.
For Each file In files 
21.
if file.datelastmodified < datei Then 
22.
If Left(file.Name, 6) = "103360" And fso.GetExtensionName(filename) = "XML" Then 
23.
fso.CopyFile file, "C:\Temp\test3\" 
24.
End If 
25.
End If 
26.
next
Bitte warten ..
Mitglied: bastla
14.12.2011 um 11:44 Uhr
Hallo staga75!

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

Grüße
bastla
Bitte warten ..
Mitglied: staga75
14.12.2011 um 13:57 Uhr
Danke für den Hinweis. Funktioniert tip top.

gruss
Staga
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Dateien kopieren die nicht mehr verändert werden? (10)

Frage von pbelcl zum Thema Batch & Shell ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Batch & Shell
Nur aktuelle Dateien kopieren (3)

Frage von icke.hausen zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...