Datum per Batchdatei prüfen und vergleichen
Guten Tag
Habe ein problem.
Ich will Dateien prüfen auf ihr datum und die Dateien vergleich.
Habe das schon mal versucht mit der Zeile
c:If (dir C:\quelle\%1 \t:w) > (dir C:\ziel\%1) goto :ZIEL_NEUER else :QUELLE_NEUER
aber so richtig geht das nicht.Wäre nett wenn jemand helfen könnte.
Habe ein problem.
Ich will Dateien prüfen auf ihr datum und die Dateien vergleich.
Habe das schon mal versucht mit der Zeile
c:If (dir C:\quelle\%1 \t:w) > (dir C:\ziel\%1) goto :ZIEL_NEUER else :QUELLE_NEUER
aber so richtig geht das nicht.Wäre nett wenn jemand helfen könnte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 93955
Url: https://administrator.de/forum/datum-per-batchdatei-pruefen-und-vergleichen-93955.html
Ausgedruckt am: 23.01.2025 um 09:01 Uhr
7 Kommentare
Neuester Kommentar
Hallo EnricoS und willkommen im Forum!
Bevor wir hier anfangen, Kunststücke mit Datumszerlegungen und -vergleichen anzustellen: Was hast Du eigentlich dann weiter vor? Sollte es nur ein Kopieren sein, würde "xcopy /d" schon genügen, wobei sich das auch (für eine einzelne Datei in %1) so einsetzen ließe:
Grüße
bastla
Bevor wir hier anfangen, Kunststücke mit Datumszerlegungen und -vergleichen anzustellen: Was hast Du eigentlich dann weiter vor? Sollte es nur ein Kopieren sein, würde "xcopy /d" schon genügen, wobei sich das auch (für eine einzelne Datei in %1) so einsetzen ließe:
@echo off & setlocal
xcopy /d /l /y "C:\quelle\%1" "C:\ziel\%1"|findstr /b /c:"0 Datei(en) kopiert">nul && goto :QUELLE_NICHT_NEUER
echo Quelle ist neuer ...
goto :eof
:QUELLE_NICHT_NEUER
echo Quelle ist nicht neuer ...
Grüße
bastla
Hallo EnricoS!
Vermutlich wäre für Deine Anwendung ein Synchronisierungstool mit grafischer Oberfläche besser geeignet, aber eine Lösung per Batch ist natürlich auch möglich.
Soll tatsächlich für jede einzelne Datei eine Entscheidung abgefragt werden?
Wenn ja, welche Entscheidung wird wahrscheinlich öfter getroffen - das Übernehmen der neueren Datei aus der Quelle (oder auch dem Ziel), oder das Zurückkopieren einer alten Version (vermutlich ersteres )?
Grüße
bastla
Vermutlich wäre für Deine Anwendung ein Synchronisierungstool mit grafischer Oberfläche besser geeignet, aber eine Lösung per Batch ist natürlich auch möglich.
Soll tatsächlich für jede einzelne Datei eine Entscheidung abgefragt werden?
Wenn ja, welche Entscheidung wird wahrscheinlich öfter getroffen - das Übernehmen der neueren Datei aus der Quelle (oder auch dem Ziel), oder das Zurückkopieren einer alten Version (vermutlich ersteres )?
Grüße
bastla
Hallo EnricoS!
Ein einfacher Ansatz (nur neuere oder noch nicht im Ziel vorhandene Dateien zum Kopieren anzubieten) sähe so aus:
Das ließe sich dann noch mit umgekehrter Quelle und Ziel wiederholen, sodass auch die im Ziel neueren Dateien angeboten würden.
Grüße
bastla
Ein einfacher Ansatz (nur neuere oder noch nicht im Ziel vorhandene Dateien zum Kopieren anzubieten) sähe so aus:
xcopy /e /d /f /p /y C:\Quelle C:\Ziel
Grüße
bastla
Hallo EnricoS!
Na gut, dann (ungetestet) etwa so:
Grüße
bastla
Na gut, dann (ungetestet) etwa so:
:Synchronisieren
::der Datei %1
set "Q=C:\Quelle\%~1"
set "Z=C:\Ziel\%~1"
if not exist "%Q%" goto :Ziel_kopieren
if not exist "%Z%" goto :Quelle_kopieren
set QuellZeit=
set ZielZeit=
for /f "tokens=1-5 delims=.: " %a in ("C:\Quelle\%~t1") do set "QuellZeit=%c%b%a%d%e"
for /f "tokens=1-5 delims=.: " %a in ("C:\Ziel\%~t1") do set "ZielZeit=%c%b%a%d%e"
if not defined QuellZeit goto :KeineQuellZeit
if not defined ZielZeit goto :KeineZielZeit
if %QuellZeit% gtr %ZielZeit% goto :QuelleNeuer
if %QuellZeit% lss %ZielZeit% goto :ZielNeuer
REM Beide Dateien haben das selbe Datum, daher keine Frage/Aktion erforderlich
goto :eof
:KeineQuellZeit
echo Für %1 konnte keine Zeitangabe ermittelt werden!
goto :eof
:Keine ZielZeit
echo Für %1 konnte keine Zeitangabe ermittelt werden!
goto :eof
:QuelleNeuer
echo Die Datei %1 im Quellverzeichniss ist aktueller.
echo 1 ins Zielverzeichniss kopieren?
echo 2 Abbrechen?
echo 3 Ersetzen?
echo\
set /p "Auswahl=Bitte 1, 2 so oder 3 eingeben: "
if "%Auswahl%"=="1" goto :Quelle_kopieren
if "%Auswahl%"=="3" goto :Ziel_kopieren
echo Unterschiedliche Versionen bleiben erhalten.
echo\
goto :eof
:ZielNeuer
echo Die Datei %1 im Zielverzeichniss ist aktueller.
echo 1 ins Quellverzeichniss kopieren?
echo 2 Abbrechen?
echo 3 Ersetzen?
echo\
set /p "Auswahl=Bitte 1, 2 so oder 3 eingeben: "
if "%Auswahl%"=="1" goto :Ziel_kopieren
if "%Auswahl%"=="3" goto :Quelle_kopieren
echo Unterschiedliche Versionen bleiben erhalten.
echo\
goto :eof
:Quelle_kopieren
copy "%Q%" "%Z%">nul
goto :eof
:Ziel_kopieren
copy "%Z%" "%Q%">nul
goto :eof
Grüße
bastla