Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Batch-Datei, Datumsvergleich

Empfohlene Antworten

Veröffentlicht

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!;)

Ist richtig, aber ich weiss nicht wie ich das letzte Änderungsdatum aus der Datei rauskrige.. Hab Problemen mit Syntax..

Bearbeitet von 2double2

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

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?

Ich würde die empfehlen Perl zu verwenden.

Damit vereinfachst du dir dein Leben...

Perl ? Weis nicht was du meinst :)

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:
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;)

VBS würde sich hier - falls zulässig - ebenfalls anbieten.

s'Amstel

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.

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

WSH Utility Functions & Subroutines

übrigens ist der WSH - wenn nicht durch GPO oder ähnlich deaktiviert - standardmässig verfügbar.

s'Amstel

WSH Utility Functions & Subroutines

übrigens ist der WSH - wenn nicht durch GPO oder ähnlich deaktiviert - standardmässig verfügbar.

s'Amstel

Danke, bin schon dabei ! ;) Kannst du vielleicht einen Tip geben, wie man am besten die datei öffnet?

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

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

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

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]

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

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.

Das Script wird nicht kompiiliert!

Du schreibst es genauso wie eine Batch und änderst aber die Dateiendung anstatt ".bat" in ".vbs".

Zumindest habe ich es nie anders gesehen ;-)

MfG

S4nCeZZ

Das Script wird nicht kompiiliert!

Du schreibst es genauso wie eine Batch und änderst aber die Dateiendung anstatt ".bat" in ".vbs".

Hallo)) Ich sags noch mal.... Batch mache ich nicht mehr. Das ist schon eine .VBS Datei, die diesen Fehler ausgibt ..

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.