Anzeige

 VBS Aktuellste Datei senden


#1
Hallo,
ich bin auf der Suche nach einer Lösung für mein Problem, ich versuche jeweils die aktuellste Datei zu versenden, jedoch weiss ich einfach nicht wie ich das anstellen soll.
Es werden durch Trigger bei Eintreten eines Ereignisses Druckaufträge in einem Ordner abgelegt, diese sollen per Email später man mit den aktuellen Daten versendet werden.
Kann mir jmd helfen?

Verzeiht meine Unwissenheit...

PS.: Gibt es eine Möglichkeit eine Datei nach dem folgenden Muster zu verketten:
"%" + "Beispiel" + "%"

Grüße
 
#3
es werden Daten in einen Ordner mit einem Zeitstempel abgespeichert, diese Daten würde ich gern selektieren nach der neuersten Datei. Die Neuerste Datei soll später als Anhang versendet werden.
Jedoch weiss ich nicht wie ich die Dateien mit einem Dateipfad vergleichen soll..
 

Yaslaw

n/a
Moderator
#4
Ist der Zeitstempel Bestandteil des Namens? Wenn ja, wie ist der Namen aufgebaut (Format)?

Wozu einen Vergleich von Dateien mit einem Pfad? Ich dachte du willst einfach die neuste.
Dazu alle Dateinamen einlesen. Den Namen parsen und das Datum extrahieren. Das grösste Datum auswählen und entsprechende Datei nehmen.

Nachtrag:
Etwa so sollte es gehen.
Visual Basic:
Const C_FOLDER = "C:\MeinOrdner"

'FileSystemObject öffnen
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim f
Dim lastFile
For Each f In fso.GetFolder(C_FOLDER).Files
	If getFileDate(f) > getFileDate(lastFile) Then Set lastFile = f
Next f
If Not lastFile Is Nothing Then
	'//TODO: lastFile per email versenden
End If

Function getFileDate(ByRef iFile)
	If iFile Is Nothing Then
		getFileDate = 0
		Exit Function
	End IF
	'//Todo: Logik um das Datum aus der Datei zu extrahieren
End Function
 
Zuletzt bearbeitet:
#5
Uhrzeit und Jahr ist enthalten
Format: PRT_OUT\'meineAblage'_YYYYMMDDhhmmssmmm\...

ja so hab ich mir das gedacht, aber wie kann ich Dateien in einem Ordner vergleichen, der durchgehend aktualisiert wird.

bzw. wie soll ich in diesen Ordner reinkommen?
Ich glaub ich steh bisschen auf dem schlauch
 

Yaslaw

n/a
Moderator
#8
Visual Basic:
'FileSystemObject öffnen
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim fld
Dim lastFolder

rx.Pattern = C_DATE_PATTERN

For Each fld In fso.GetFolder(PRT_OUT).Folders
	'Da der name immer gleich und sogar sortierbar ist, kann direkt der Ordnername verglichen werden
	If fld.name > lastFolder.name Then Set lastFolder = fld
Next fld
If Not lastFolder Is Nothing Then
	If lastFolder.Files.Count > 0 then
		'//TODO: lastFile per email versenden
		' lastFolder.Files(0)
	End If
End If
 

Yaslaw

n/a
Moderator
#10
Kann sein dass VBS den Einzeiler nicht mag oder beim next die Variable. Ich bin ganz selten in VBS unterwegs....
Versuch mal
Visual Basic:
For Each fld In fso.GetFolder(PRT_OUT).Folders
    'Da der name immer gleich und sogar sortierbar ist, kann direkt der Ordnername verglichen werden
    If fld.name > lastFolder.name Then
        Set lastFolder = fld
    End If
Next fld

'oder
For Each fld In fso.GetFolder(PRT_OUT).Folders
    'Da der name immer gleich und sogar sortierbar ist, kann direkt der Ordnername verglichen werden
    If fld.name > lastFolder.name Then Set lastFolder = fld
Next
 

Yaslaw

n/a
Moderator
#12
Da waren einige Dinge drin, die in VBS nicht ganz so simpel sind.
Pro Ordner ist nur eine Datei?

Hier mein funktionierender Test
Visual Basic:
'FileSystemObject öffnen
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim fld
Dim f
Dim lastFolder
Dim p
Const PRT_OUT = "C:\_TMP\ForumSandbox\t405718\Data"

Set lastFolder = Nothing
For Each fld In fso.GetFolder(PRT_OUT).SubFolders
	'Da der name immer gleich und sogar sortierbar ist, kann direkt der Ordnername verglichen werden
	If lastFolder Is Nothing Then
		Set lastFolder = fld
	elseIf fld.name > lastFolder.name Then
		Set lastFolder = fld
	End If
Next
If Not lastFolder Is Nothing Then
	If lastFolder.Files.Count > 0 then
		'//TODO: lastFile per email versenden
		For each f in lastFolder.Files
			msgbox f.path
		next
	End If
End If
 
Anzeige

Neue Beiträge

Anzeige