Batchdatei Änderungsdatum

Flotho

Ensign
Registriert
Juni 2007
Beiträge
233
Hallo Leute,

habe mal eine Frage! Brauche eine Batchdatei, die mir in dem Ordner C:\Temp alle darinbefindlichen Datein auf das Änderungsdatum überprüft und die Dateien, die älter als 7 Tage sind mit eine E-Mail schicken soll!

Ist das möglich?

Gruß,
Michael
 
Warum muss es eine Batch Datei sein? Ist machbar aber umständlich, vor allem der Mailversand von der Kommandozeile ohne weitere Zusatztools.

In Visual Basic ist die Aufgabe ein Klacks, daher würde ich gar nicht weiter über Batch nachdenken in diesem Fall.
 
Visual Basic hab ich noch nie programmiert! Bin nicht so der Fachmann für solche Sachen ;-)
 
Mit xcopy wirst du keine allgemein funktionierende Lösung hinbekommen, da du beim xcopy ein fixes Datum der Dateien angeben musst.

Du kannst nicht rechnen lassen: Datum heute - 7 Tage


Und dann bleibt noch das Problem mit dem Mailversand.

Ohne Visual Basic oder anderer Programmiersprache kannst du es wohl vergessen.

Evtl. poste ich später den VB.Net Code, kompilieren musst du selber. Mehr als das Microsoft .Net Framework brauchst du dafür aber nicht.

edit: Hast du überhaupt einen Mailserver parat, der noch via SMTP Mails entgegennimmt?
 
das wäre echt nett, wenn du mal den vb.net code posten könntest!
ja ein mailserver ist auch vorhanden...
 
Hier dein Code. Kopier den Kram in eine .vb Datei. Passe die Zeile zum Mailversand an deine Gegebenheiten an.

Die .vb Datei dann kompilieren. Der Compiler heisst vbc.exe und liegt im Ordner

C:\WINDOWS\Microsoft.NET\Framework\v3.5 oder
C:\WINDOWS\Microsoft.NET\Framework\v2.0 falls du 3.5 noch nicht installiert hast.

Dann hast du deine .exe Datei.



Imports System.IO
Imports System.Net.Mail

Module Module1

Sub Main()
Dim myFileArray = My.Computer.FileSystem.GetFiles("C:\Temp")
Console.WriteLine("Folgende Dateien sind älter als 7 Tage und werden per Mail versendet:")
For Each File As String In myFileArray
Dim ModifyDate = My.Computer.FileSystem.GetFileInfo(File).LastWriteTime.Date.AddDays(7)
If Mid((ModifyDate - Now.Date).ToString, 1, 1) = "-" Then
'Älter als 7 Tage und muss verschickt werden
Console.WriteLine(File)
'Email Versand
Dim message As New MailMessage("Absender@abc.de", "Empfänger@xyz.de", "Mailthema", "Mailtext")
Dim emailClient As New SmtpClient("IP oder Servername von deinem Mailserver")
Dim attachment1 = New Attachment(File)
message.Attachments.Add(attachment1)
emailClient.Send(message)
End If

Next File
End Sub
End Module
 
Soweit funktioniert das, nur er schreibt mir mehrere Mails! Am besten wäre alles in einer Mail!
Zudem soll er nicht die Dateien an die Mail anhängen, sondern es soll nur eine Textdatei in der Mail als Anhang dran sein, mit den Dateinamen (die in meinem Fall dann älter als 7 Tage sind)!
Wie ist die entsprechende Funktion dafür?

Wäre über Hilfe sehr erfreut :-)
 
Zuletzt bearbeitet:
Das geht auch. Ist auch nicht schwer. Bin heute aber nicht mehr am PC, daher wirds ehr morgen was.

Du kannst auch selber ein bißchen rumprobieren.

Zieh dir am besten das kostenlose Visual Basic Express von der Microsoft Seite. Damit kannst du komfortabel Code schreiben.
 
Danke :-)
Ich werde mal noch ein bisschen rumprobieren, aber wäre nett, wenn du morgen mal das Ergebnis hier posten könntest, falls ich es nicht hinbekommen sollte!
 
Soo.. hier wird nur noch 1 Mail verschickt. Darin ist keine Textdatei mit den Namen, sondern die Namen sind als Text im Mail direkt enthalten:





Imports System.IO
Imports System.Net.Mail

Module Module1

Sub Main()
Dim myFileArray = My.Computer.FileSystem.GetFiles("C:\Temp")
Dim MessageText As String = ""
Console.WriteLine("Folgende Dateien in C:\Temp sind älter als 7 Tage:") : Console.WriteLine()
For Each File As String In myFileArray
Dim ModifyDate = My.Computer.FileSystem.GetFileInfo(File).LastWriteTime.Date.AddDays(7)
If Mid((ModifyDate - Now.Date).ToString, 1, 1) = "-" Then
'Älter als 7 Tage und muss verschickt werden
Console.WriteLine(File)
MessageText = MessageText & File & vbCrLf
End If

Next File
'Email Versand
Dim message As New MailMessage("Absender@abc.de", "Empfänger@xyz.de", "Files die älter als 7 Tage sind", MessageText)
Dim emailClient As New SmtpClient("IP deines Mailservers oder Servername")
emailClient.Send(message)
End Sub
End Module
 
Zurück
Oben