baenky
Goto Top

Änderungsdatum von Datei ermitteln - NICHT Erstellungsdatum

Hallo zusammen, ich hoffe jmd. kann mir sagen, wie ich hier weiterkomme ... ich denke, es ist nur eine Kleinigkeit...

Ich möchte gerne die beiden Datumsangaben für "geändert am" zweier Dateien vergleichen.

hier im Forum habe ich gesehen, dass ich mir das Datum folgendermaßen ausgeben lassen kann:

for %i in ("%ProgramFiles%\Datei") do @echo %~ti

Es scheint aber leider das "erstellt am"-Datum sein und somit nicht das, was ich brauche...

Ich hab mir meine beiden Dateien angesehen. Als Ausgabe erhalte ich das Erstellungsdatum.

Ich habe auch schon mal wild herumprobiert, von wegen %~tm oder %~tl - so nach dem Motto: könnte "last modified" heißen. Hat natürlich nicht funktioniertface-smile

Kann mir jmd. sagen, wie ich dahinter komme? Oder zumindest wonach ich suche könnte...

Danke und Gruß

Nadine

Content-Key: 119514

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

Printed on: April 25, 2024 at 23:04 o'clock

Member: bastla
bastla Jul 01, 2009 at 13:23:41 (UTC)
Goto Top
Hallo baenky und willkommen im Forum!

Eigentlich solltest Du mit "~ti" tatsächlich das Änderungsdatum erhalten ...

Mit der folgenden Zeile kannst Du aber genau (durch die Option "/t" des "dir"-Befehles) festlegen, welches Datum es nun sein soll:
for /f "tokens=1,2" %i in ('dir "%ProgramFiles%\Datei" /tw^|findstr /i /c:" Datei"') do @echo %i_%j
Grüße
bastla
Member: Baenky
Baenky Jul 01, 2009 at 13:34:04 (UTC)
Goto Top
Hallo bastla,

Danke für die schnelle Antwort.

Ich kenne mich mit dem Scripting leider noch nicht aus und hab heute das erste mal ins Thema reingeschnuppert... mit Deinem Code erhalte ich die Anzahl der Dateien - kann das sein?

Gruß

Nadine
Member: bastla
bastla Jul 01, 2009 at 16:36:44 (UTC)
Goto Top
Hallo baenky!
mit Deinem Code erhalte ich die Anzahl der Dateien - kann das sein?
Sollte es nicht - wenn Du für "Datei" jeweils einen korrekten Dateinamen inkl. Typ einsetzt, also etwa
Z:\>for /f "tokens=1,2" %i in ('dir "%programfiles%\mozilla firefox\firefox.exe" /tw^|findstr /i /c:" firefox.exe"') do @echo %i_%j
solltest Du auch Datum und Uhrzeit als Ergebnis erhalten.

Grüße
bastla
Member: Baenky
Baenky Jul 02, 2009 at 06:13:49 (UTC)
Goto Top
Hallo bastla,

Danke, jetzt bekomme ich die Zeiten - lag aber doch an etwas anderem...war einfach blindface-smile

Jetzt muss ich eigentlich nur noch die Daten vergleichen...ich denke dann sollte ich durch sein.

Gruß

Nadine
Member: Biber
Biber Jul 02, 2009 at 06:46:02 (UTC)
Goto Top
Moin Baenky,

willkommen im Forum auch von mir.
Zitat von @Baenky:
Jetzt muss ich eigentlich nur noch die Daten vergleichen...
ich denke dann sollte ich durch sein.
Genau genommen erst dann, wenn dieser Beitrag auch einen klitzekleinen Toastbrot-aus-2008-farbenen Haken von Dir erhält. face-wink

Grüße
Biber
Member: Baenky
Baenky Jul 06, 2009 at 08:54:46 (UTC)
Goto Top
Hallo nochmal,

ich kann jetzt die Daten vergleichen - das klappt, aber leider komme ich nicht mit dem Rest zurecht.

Eigentlich wollte ich eine Sprungmarke anspringen, wenn die Datei-Datumsangaben NICHT gleich sind, aber das klappt nicht:

rem call msiexec /i  \\accfile\ams\Install\acc.CV\Com_CV_Install.msi 

@echo off
setlocal

set AMSDest=%ProgramFiles%\AMS
set AESDest=%ProgramFiles%\AES

set AMSSrc=K:\Install
set AESSrc=K:\Install\AES

::Aktionen durchführen, Variable "Datum" aus Dateidatum erhalten, mit % ~ti  
for %i in ("K:\Install\AMS.exe") do set dateRC=%~ti  
for %i in ("%ProgramFiles%\AMS\AMS.exe") do set dateLokal=%~ti  

if not "%dateRC%"=="%dateLokal%" goto :doit  
goto :ende
echo test

:doit 
echo Entferne alte DLL aus Registrierung


:ende
echo endlocal

Die zu vergleichenden Were sind aktuell gleich. Somit sollte doit: übersprungen werden und nur zu ende: gegangen werden. Das ist aber nicht der Fall... mache ich etwas falsch?

Noch eine allgemeine frage: Können nach einer Sprungmarke mehrere Befehle folgen? Das müsste doch eigentlich gehen, weil er nur dahin springt und von da weiter macht, oder?
Mitglied: 80220
80220 Jul 06, 2009 at 09:04:05 (UTC)
Goto Top
Zitat von @Baenky:
... mache ich etwas falsch?

Ja. face-smile
Im Batch muss für Schleifenvariablen ein doppeltes Prozentzeichen verwendet werden, alse
for %%i in ("K:\Install\AMS.exe") do set dateRC=%%~ti  
for %%i in ("%ProgramFiles%\AMS\AMS.exe") do set dateLokal=%%~ti  

In einer Subroutine (Sprungmarke) kannst du auch mehrere Anweisungen verarbeiten.
Member: Baenky
Baenky Jul 06, 2009 at 09:05:36 (UTC)
Goto Top
Ok, auch für das %~ti ?

Oder nur für dateLocal und dateRC?

Danke und Gruß

Nadine
Mitglied: 80220
80220 Jul 06, 2009 at 09:07:26 (UTC)
Goto Top
dateLocal und dateRC

Das sind keine Schleifenvariablen, sondern ganz normale Variablen. face-wink
Member: Baenky
Baenky Jul 06, 2009 at 09:09:22 (UTC)
Goto Top
Danke, jetzt klappt es.

Gruß

Nadine
Member: Biber
Biber Jul 06, 2009 at 09:14:03 (UTC)
Goto Top
Ja.

Schleifenvariablen (=dynamische Laufvariablen) werden von den FOR-Anweisungen generiert und ggf. etwas spezielle ausgegeben.
D.h diese Variablen
  • existieren nur, solange auch die FOR-Anweisung ausgeführt wird
  • heißen am CMD-Prompt "%+ein Nicht-Ziffern-Zeichen" -->%i, %j ..oder %A, %B
  • heißen im Batch "%%+ein Nicht-Ziffern-Zeichen" -->%%i, %%j ..oder %%A, %%B
  • können leicht abgeschrägte Datailwerte liefern (%~ti ---> %%~ti etc)
  • können ein paar Sachen nicht, die mit SET gesetzte Variable mit links schaffen (Substring oder einzelnes Zeichen zurückgeben)


Grüße
Biber