2double2 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 Du vergleichst nicht das aktuelle Datum mit dem Datum der Datei, sondern die Datei mit einem Datum. Das kann so nicht gehen. Du willst ja das eine mit dem anderen Datum vergleichen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 (bearbeitet) Ist richtig, aber ich weiss nicht wie ich das letzte Änderungsdatum aus der Datei rauskrige.. Hab Problemen mit Syntax.. Bearbeitet 10. Juni 2008 von 2double2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 (bearbeitet) 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 10. Juni 2008 von Crash2001 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SichlMichl Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 Ich würde die empfehlen Perl zu verwenden. Damit vereinfachst du dir dein Leben... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 Perl ? Weis nicht was du meinst Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 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;) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 VBS würde sich hier - falls zulässig - ebenfalls anbieten. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 (bearbeitet) 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 10. Juni 2008 von Crash2001 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 WSH Utility Functions & Subroutines übrigens ist der WSH - wenn nicht durch GPO oder ähnlich deaktiviert - standardmässig verfügbar. s'Amstel Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 10. Juni 2008 Autor Teilen Geschrieben 10. Juni 2008 (bearbeitet) 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 10. Juni 2008 von 2double2 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 10. Juni 2008 Teilen Geschrieben 10. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 11. Juni 2008 Autor Teilen Geschrieben 11. Juni 2008 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Amstelchen Geschrieben 11. Juni 2008 Teilen Geschrieben 11. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 11. Juni 2008 Autor Teilen Geschrieben 11. Juni 2008 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: Batch mache ich nicht mehr... ich hab doch die Lösung mit VBScript genommen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
S4nCeZZ Geschrieben 12. Juni 2008 Teilen Geschrieben 12. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
2double2 Geschrieben 12. Juni 2008 Autor Teilen Geschrieben 12. Juni 2008 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 .. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.