Zum Inhalt springen

Batch-Datei, Datumsvergleich


2double2

Empfohlene Beiträge

Hallo Forum!

ich versuch seit einigen stunden eine Batch-Datei zu schreiben, die soll das Datum von zwei Files vergleichen und wenn ein Datum kleiner als das andere ist, öffnet sich eine .txt. Könnte mir jemand sagen, was hier falsch ist :confused: :


@echo off



set datefile=C:\Dokumente und Einstellungen\Administrator\NTUSER.DAT

set textfile=C:\Dokumente und Einstellungen\Administrator\Liste.txt


if %date% LSS %datefile%

start %textfile% 


pause


Danke im Voraus!;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die einzige Möglichkeit die ich kenne ist, dies aus einer textdatei dann herausschneiden.

mit

dir [dateiname] /TW
gibst du das Datum des letzten Schreibzugriffs auf die Datei (also der letzten Änderung) aus. Das leitest du in eine Datei um.
dir [dateiname] TW > [datei.txt]

Wenn du das erst einmal in einer Datei drinstehen hast, kannst du dir die Ausgabe entsprechend zusammenschneiden und in einer Variablen speichern.

Bearbeitet von Crash2001
Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke, das ist hilfreich, aber jetzt hab ich noch ein größes Problem vor mir, ich muss eine such- oder filterfunktion einbauen, was das datum rausnimmt... So wirds nach dem Befehl ausgegeben:


 Volume in Laufwerk C: hat keine Bezeichnung.

 Volumeseriennummer: 7C1A-0E5C


 Verzeichnis von C:\Dokumente und Einstellungen\Administrator\Desktop


10.06.2008  10:42               188 test.cmd

               1 Datei(en),            188 Bytes

               0 Verzeichnis(se),  9.870.319.616 Bytes frei

kann man irgendwie das %data% mit dem Dateinamen verknüpfen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Klar kann mand as auch mit Perl machen - und dort auch noch komfortabler. Perl gehört jedoch nicht zur Grundausstattung eines Windows-PCs, weshalb man das erst noch manuell nachinstallieren müsste und es somit auch nur auf den PCs laufen würde, auf denen Perl installiert ist.

[...]kann man irgendwie das %data% mit dem Dateinamen verknüpfen?
Was meinst du damit? :confused:
Link zu diesem Kommentar
Auf anderen Seiten teilen

Was meinst du damit? :confused:

%data% - ist das aktuelle Datum und ich dachte, wenn der befehl mit einem dateinamen verknüpft ausführen lassen, könnte auch das änderungs- oder erstellungsdatum ausgegeben werden. Ich programmiere Batch zum ersten Mal :) also war nur ne frage;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

dat ganze soll auf einem terminalserver laufen, deshalb würde ich da keine zusätlichen sw installieren.. Die Idee ist dadurch ein Newssystem zu realisieren, die Batch-Datei wird nachher in Autostart zugefügt und wir bei jeder Anmeldung ausgeführt. Das wichtigste ist dabei, das schonmal gelesene Datei nicht geöffnet wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso - du meinst %date% - nicht %data% .

Das ist eine Systemvariable - kein Befehl.

Es gibt zwar den Befehl date, aber der lässt sich auch nicht auf eine Datei anwenden.

Unter DOS ist mir da leider keine Möglichkeit für bekannt. War auch mein erster Gedanke, aber scheint wohl nicht zu gehen.

Bearbeitet von Crash2001
Link zu diesem Kommentar
Auf anderen Seiten teilen

wieso willst du die datei jetzt auf einmal öffnen?

ich dachte, du willst nur das datum der letzten änderung der datei?

dafür gibts nämlich die funktion FileLastModified.

EDIT: ich glaube, du meinst, die textdatei aufzurufen:

set shell = Wscript.CreateObject("Wscript.Shell") 

' führe notepad aus und warte bis es beendet ist (true) 

Shell.Run "notepad.exe",,true 

statt notepad.exe sollte es auch möglich sein, direkt die textdatei anzugeben.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

wieso willst du die datei jetzt auf einmal öffnen?

ich dachte, du willst nur das datum der letzten änderung der datei?

s'Amstel

Wie ich früher geschrieben hab :

Die Idee ist dadurch ein Newssystem zu realisieren, die Batch-Datei wird nachher in Autostart zugefügt und wir bei jeder Anmeldung ausgeführt. Das wichtigste ist dabei, das schonmal gelesene Datei nicht geöffnet wird.

Danke für deine Tipps, es funkt, jetzt muss ich nur noch die Vergleichsanweisung anpassen... da öffnet er die Datei ohne die Datum zu vergleichen..

Hier ist mein Quellcode, falls sich jemand für den Lösungsweg interissiert:


'Return the date a file was last accessed


function FileLastAccessed(Fname)


  FileLastAccessed = "C:\Dokumente und Einstellungen\Administrator\NTUSER.dat"


  Set fs = CreateObject("Scripting.FileSystemObject")


  if fs.FileExists(Fname) = True then

    Set f = fs.GetFile(Fname)

    FileLastAccessed = f.DateLastAccessed

  end if


end function


'Return the date/time a file was last modified

function FileLastModified(Fname)


  FileLastModified = "C:\Dokumente und Einstellungen\Administrator\Liste.txt"


  Set fs1 = CreateObject("Scripting.FileSystemObject")


  if fs1.FileExists(Fname) = True then

    Set f1 = fs.GetFile(Fname)

    FileLastModified = f.DateLastModified

  end if

'Set f1 = Nothing

'Set fs1 = Nothing

end function


  if f > f1  then


  msgbox ("Sie haben neue ungelesene Nachrichten!")

  Set ShellWSH = CreateObject("WScript.Shell")

  ShellWSH.Run "C:\Dokumente und Einstellungen\Administrator\Liste.txt", 1, True


  end if






 

Bearbeitet von 2double2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Der notepad.exe sollte man eigentlich den Dateinamen einfach direkt mit übergeben können, wenn man sicher sein will, dass die Datei auch wirklich damit aufgerufen wird. Ansonsten wird sie mit dem Standardprogramm was für .txt-Dateien festgelegt ist geöffnet.

Also Shell.Run "notepad.exe dateiname.txt",,true

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab das ganze Programm jetzt im Visual Studio kompiliert, die Funktionen geben keine werte zurück, also NULL wird übergeben. Ich bin am Ende..könnte mir jemand sagen wieso die Datumswerte nicht übergeben werden? :confused:


Module Modul

    Dim f

    Dim f1

    Dim fs

    Dim fs1

    Dim ShellWSH

    Dim a

    Dim b




    Function FileLastAccessed(ByVal Fname)


        FileLastAccessed = "C:\Dokumente und Einstellungen\%Username%\NTUSER.dat"


        fs = CreateObject("Scripting.FileSystemObject")


        If fs.FileExists(Fname) = True Then

            f = fs.GetFile(Fname)

            FileLastAccessed = f.DateLastAccessed

        End If


    End Function


    'Return the date/time a file was last modified


    Function FileLastModified(ByVal Fname)


        FileLastModified = "C:\Dokumente und Einstellungen\%Username%\Liste.txt"


        fs1 = CreateObject("Scripting.FileSystemObject")


        If fs1.FileExists(Fname) = True Then

            f1 = fs1.GetFile(Fname)

            FileLastModified = f1.DateLastModified


        End If


    End Function


    Sub Main()


        'Return the date a file was last accessed




        If FileLastAccessed(a) < FileLastModified( = False Then

            MsgBox(a)

            MsgBox("Sie haben neue Nachrichten!!!")

            ShellWSH = CreateObject("WScript.Shell")

            ShellWSH.Run("""C:\Dokumente und Einstellungen\%Username%\Liste.txt""", 1, True)


        End If


        'Clean up 

        f = Nothing

        f1 = Nothing

        fs = Nothing

        fs1 = Nothing




    End Sub



End Module[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab das ganze Programm jetzt im Visual Studio kompiliert

visual studio *was* 6? 2003? 2005?

das war ursprünglich VBS code-sollte also, nachdem du das auch als batch ausführen wolltest, durch den WSH ausgeführt werden.

die Funktionen geben keine werte zurück, also NULL wird übergeben

die funktionen sind primär als VBS/VB6 funktionen implementierbar.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

visual studio *was* 6? 2003? 2005?

das war ursprünglich VBS code-sollte also, nachdem du das auch als batch ausführen wolltest, durch den WSH ausgeführt werden.

s'Amstel

Microsoft Visual Basic Studio 2008 Express Edition. Als .VBS auszuführen geht nicht, da meckert er wegen der letzen Zeile, hier:

fehlernf5.png

Batch mache ich nicht mehr... ich hab doch die Lösung mit VBScript genommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...