# Dateinamen auf enthaltene Zählnummer vergleichen und kopieren



## malnefrage (22. April 2009)

Hallo! 
ich benötige ein Script (VBS/WSH), welches den Dateinamen einer lokal z.B. auf "C:\Texte" vorhandenen Datei, in dem die Versionsnummer nach dem Muster z.B. "Name123.txt" enthalten ist, mit dem der auf einer Freigabe z.B. "\\server\freigabe" liegenden Dateien vergleicht und falls dort eine Datei z.B. "Name124.txt",  also mit höhere Versionsnummer vorhanden ist, diese vom Netz auf das lokale Verzeichnis kopiert. Das ganze soll bei jedem BS-Start aufgerufen werden, um jeweils die aktuelle Datei lokal vorzuhalten.   
Vielleicht weiß Jemand, ob sowas irgendwo schon beschrieben ist, müsste doch eigentlich tägliches Butter & Brot eines Admins sein, oder? 
ich such mir schon seit Stunden einen Wolf im Web... 
Vielen Dank im Voraus!


----------



## DrSoong (22. April 2009)

Ich hab hier mal schnell experimentell was geschrieben (VBS ist nicht so mein Anwendungsgebiet):


```
Const sLocalFolder = "C:\Texte" 'Lokaler Ordner
Const sNetFolder = "\\server\freigabe" 'Netzordner
Dim sVersion, sNewVersion, sFSource, sFDest, sFDel, sNV

Set objFSO = CreateObject("Scripting.FileSystemObject")

'lokal
Set Folder = objFSO.GetFolder(sLocalFolder) 'lokalen Ordner setzen
Set Files = Folder.Files 'alle Dateien im Ordner einlesen
For Each File In Files 'alle Dateien durchgehen
 If objFSO.GetExtensionName(File.Path) = "txt" Then 'Textdateien suchen
  If Left(File.Name, 4) = "Name" Then 'Wenn das Prefix stimmt
   sVersion = Mid(File.Name, 5, Len(File.Name) - 8) 'aktuelle lokale Versionsnummer ermitteln
   End If
 End If
Next

'setze aktuelle Version als Vergleichsversion
sNewVersion = sVersion

'Netzlaufwerk
Set Folder = objFSO.GetFolder(sNetFolder) 'Netzordner setzen
Set Files = Folder.Files 'alle Dateien im Ordner einlesen
For Each File In Files 'alle Dateien durchgehen
 If objFSO.GetExtensionName(File.Path) = "txt" Then 'Textdateien suchen
  If Left(File.Name, 4) = "Name" Then 'Wenn das Prefix stimmt
   sNV = Mid(File.Name, 5, Len(File.Name) - 8) 'Versionsnummer extrahieren
   If sNV > sNewVersion then sNewVersion = sNV 'wenn Version höher als Vergleichsversion dann als neue Version setzen
  End If
 End If
Next

'Pfad & Namen für Quelle am Netz, Ziel lokal und aktuelle lokale Datei erstellen
sFDel = sLocalFolder & "\Name" & sVersion & ".txt"
sFSource = sNetFolder & "\Name" & sNewVersion & ".txt"
sFDest = sLocalFolder & "\Name" & sNewVersion & ".txt"

If sNewVersion > sVersion Then 'Wenn Version am Netzlaufwerk höher als lokale
 objFSO.DeleteFile sFDel, True 'lösche lokale Textdatei
 objFSO.CopyFile sFSource, sFDest 'kopiere Datei vom Netzlaufwerk nach lokal
End If
```

Das Script prüft am Netzordner alle Textdateien durch (kannst du natürlich mit eigener Erweiterung anpassen) und nimmt die höchste Versionsnummer Hab das ganze kommentiert, damit du auch leicht eigene Änderungen vornehmen kannst.

Teste es vorher auf einer sicheren Umgebung, sollte zwar 100% funktionieren (zumindest hier), sicher ist aber sicher.

EDIT: Damit das Script beim starten abläuft, einfach in den Autostart-Ordner reinspielen.


Der Doc!


BTW: Den Wolf findest du meist bei Rotkäppchen.


----------



## malnefrage (22. April 2009)

DrSoong hat gesagt.:


> Ich hab hier mal schnell experimentell was geschrieben (VBS ist nicht so mein Anwendungsgebiet):
> [..]
> BTW: Den Wolf findest du meist bei Rotkäppchen.



 Cool! Dafür, dass das nich so Dein Gebiet ist, t es aber super 
Vielen Dank!


----------

