klaus20
Goto Top

Erstellungsdatum überprüfen

Hallo Forum,

wie kann ich das Erstellungsdatum einer Datei herausfinden ??

Möchte folgendes machen:
1. Prüfung ob die Datei "Test.txt" vorhanden
2. falls Ja ob sie heute erstellt wurde.
3. falls Ja - Abfrage was tun.
4. falls Nein - "test2.bat" starten

Suche seit einer Weile im Forum und habe auch Teilösungen gefunden die ich nur leider nicht umsetzen kann

z.B.:
Datum einer Datei mit aktuellem Datum per Batch vergleichen --> Datum einer Datei mit aktuellem Datum per Batch vergleichen

Habe nur keine Ahnung von for%% bzw. findstr.

Vielleicht kann mir jemand eine Hilfestellung geben bzw. mir das erklären.

Gruß Klaus

Content-Key: 167386

Url: https://administrator.de/contentid/167386

Printed on: April 24, 2024 at 12:04 o'clock

Member: Friemler
Friemler Jun 02, 2011 at 11:07:08 (UTC)
Goto Top
Hallo Klaus,

könnte so gehen:
@echo off

setlocal

set "FilePath=."  
set "File=test.txt"  


if not exist "%FilePath%\%File%" exit /b  

for /f %%d in ('dir /t:c "%FilePath%\%File%" ^| findstr /i /c:"%File%"') do set "FileCreationDate=%%d"  
if /i "%FileCreationDate%" neq "%date%" goto :FileIsOld  


set /p "Action=Was nun? "  
::
::
exit /b


:FileIsOld
call "test2.bat"  

Der Parameter /T:C des DIR-Befehls liefert das Erstellungsdatum von Dateien. FINDSTR sucht die Zeile der Ausgabe von DIR, die den gesuchten Dateinamen enthält, Groß-/Kleinschreibung ist dabei egal. Das Datum einer Datei steht in der Ausgabe von DIR am Zeilenanfang, danach kommen Leerzeichen, das Datum ist also das erste Token für die FOR-Schleife und wird der Laufvariablen %%d zugewiesen. Innerhalb der Schleife wird %%d der Variablen FileCreateionDate zugewiesen. Wenn deren Inhalt nicht mit dem Inhalt der DATE-Variablen übereinstimmt (den Vergleich kann man so machen, da die Einstellungen für das Datumsformat in der Systemsteuerung sowohl die DATE-Variable als auch die Ausgabe von DIR beeinflussen), wird zum Label FileIsOld gesprungen, wo das Batchfile aufgerufen wird. Wenn die Datei am aktuellen Tag erstellt wurde, landet man also bei der Abfrage Was nun? (ich hoffe, ich habe das richtig verstanden). Zwischen der Abfrage und dem EXIT /b dann weiteren Code einfügen.

Dass das ganze nur mit NTFS-Partitionen funktioniert, dürfte klar sein.

Gruß
Friemler
Member: Klaus20
Klaus20 Jun 02, 2011 at 11:35:47 (UTC)
Goto Top
Hallo Friemler,
klappt wunderbar nun kann ich dank Deiner Erklärung das Ganze ein wenig nachvollziehen. Die Betonung liegt allerdings bei ein wenig.
Könntest Du mir noch sagen wie ich bei was nun - Neu ausführen oder Verlassen einfügen kann ??
Wie geht das Ganze es unter FAT ??

Gruß
Klaus
Member: Friemler
Friemler Jun 02, 2011 at 11:45:28 (UTC)
Goto Top
Hallo Klaus,

ist es denn so schwer, einfach mal SET /? in einem Konsolenfenster einzugeben und mal ein bisschen mit dem Befehl rumzuexperimentieren?

Das FAT-Dateisystem kennt nur ein Dateidatum, das der letzten Änderung. Nur NTFS protokolliert drei Datumswerte (Erstellung, Änderung, letzter Zugriff).

Gruß
Friemler
Member: Klaus20
Klaus20 Jun 02, 2011 at 12:13:13 (UTC)
Goto Top
Hallo Friemler,
langsam komme ich vorwärts. Wie ermittle ich nur das Dateidatum ??

Habe mit dir /t:w das letzte Tzugriffsdatum ermittelt - mir würde allerdings auch das Dateidatum reichen.

Zur Ja Nein Abfrage:
Kann man die Enter Taste auch abfragen - z.B.: J ,j oder Enterfür JA bzw. N oder n für Nein ??


Gruß
Klaus
Member: Friemler
Friemler Jun 02, 2011 at 12:30:10 (UTC)
Goto Top
Hallo Klaus,

wenn Du damit das Datum der letzten Änderung meinst, lass den Parameter /t:c beim DIR-Befehl weg.

Gruß
Friemler
Member: Friemler
Friemler Jun 02, 2011 at 13:10:45 (UTC)
Goto Top
Hallo Klaus,

um auf die nachgeschobenen Fragen einzugehen:

  1. Was meinst Du denn nun mit "Dateidatum"?
  2. Die Enter-Taste kann man nicht separat abfragen. Du kannst aber vor dem set /p "Action=Was nun? " die Variable Action auf J setzen. Wenn der Benutzer nur Enter drückt, wird der Inhalt von Action nicht verändert, enthält dann also immer noch J. Das kannst Du dann durch if /i "%Action%" equ "J" abfragen. Durch den Parameter /i beim IF wird beim Vergleich die Groß-/Kleinschreibung nicht beachtet.

Gruß
Friemler
Member: TsukiSan
TsukiSan Jun 02, 2011 at 13:12:25 (UTC)
Goto Top
Moin Männers und happy father's day face-smile

Ich will mich ja nicht reindrängeln und bei Friemler sind wir alle in sehr guten Batchhänden!
Ich möchte nur eine Lösung in VBS anzeigen, falls es andere interessiert
MyFile = "C:\MeineDatei.txt"  

Set objFSO = CreateObject("Scripting.FileSystemObject")  

If objFSO.FileExists (MyFile) then
  Set objFile = objFSO.GetFile(MyFile)

  Wscript.Echo "Date created: " & objFile.DateCreated  
  Wscript.Echo "Date last accessed: " & objFile.DateLastAccessed  
  Wscript.Echo "Date last modified: " & objFile.DateLastModified  
End If
Sozusagen als Männertagszugabe face-wink

Viele Grüße und ein schönes langes Wochenende
Tsuki
Member: Klaus20
Klaus20 Jun 02, 2011 at 14:00:39 (UTC)
Goto Top
Hallo Friemler,

juhu es läuft alles. Nochmals vielen Dank für Deine schnelle unkomplizierte Hilfe.
Die Entertaste habe ich bisher noch nicht hinbekommen aber vielleicht sehe ich morgen mehr.

Gruß
Klaus
Member: TsukiSan
TsukiSan Jun 02, 2011 at 14:13:33 (UTC)
Goto Top
Die Entertaste habe ich bisher noch nicht hinbekommen aber vielleicht sehe ich morgen mehr.
Dann fange neu an und mach 'ne neue Frage auf.
bei Batch etwas kompliziert, was du vor hast - du müßtest den Benutzer steuern face-wink

Gruss
Tsuki