Veröffentlicht 10. Juni 200817 j 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!
10. Juni 200817 j 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.
10. Juni 200817 j Ist richtig, aber ich weiss nicht wie ich das letzte Änderungsdatum aus der Datei rauskrige.. Hab Problemen mit Syntax.. Bearbeitet 10. Juni 200817 j von 2double2
10. Juni 200817 j 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 200817 j von Crash2001
10. Juni 200817 j 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?
10. Juni 200817 j 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:
10. Juni 200817 j 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;)
10. Juni 200817 j 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.
10. Juni 200817 j 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 200817 j von Crash2001
10. Juni 200817 j WSH Utility Functions & Subroutines übrigens ist der WSH - wenn nicht durch GPO oder ähnlich deaktiviert - standardmässig verfügbar. s'Amstel
10. Juni 200817 j 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?
10. Juni 200817 j 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
10. Juni 200817 j 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 200817 j von 2double2
10. Juni 200817 j 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
11. Juni 200817 j 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]
11. Juni 200817 j 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
11. Juni 200817 j 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.
12. Juni 200817 j 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
12. Juni 200817 j 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.