enricos
Goto Top

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.

Content-Key: 93955

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: bastla
bastla 08.08.2008 um 12:01:54 Uhr
Goto Top
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:
@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
Mitglied: EnricoS
EnricoS 08.08.2008 um 13:33:31 Uhr
Goto Top
Also die ganze sache ist dafür gedacht das wenn unser außendienstler kommt und daten geändert hat dann wollen wir nicht jede einzene suchen sondern er soll nur die ersetzen oder überschreiben die geändert wurden und jünger sind als die in der Quell datei.hier mal die idee

@echo off

if exist C:\Ziel\%1 goto FILE_TRUE

if not exist C:\Ziel\%1 goto FILE_FALSE

:FILE_TRUE
C: If dir C:\quelle\zeichnung.txt \t:w > C:\ziel\zeichnung.txt goto :ZIEL_NEUER else :QUELLE_NEUER

:ZIEL_NEUER
echo Die Datei Zeichnung.txt im Zielverzeichniss ist aktueller.
echo 1 Ersetzen?
echo 2 Abbrechen?
echo 3 ins Quellverzeichniss kopieren?
echo.

choice /C:123
if errorlevel 3 goto ZIEL_QUELLE
if errorlevel 2 goto abbrechen
if errorlevel 1 goto QUELLE_ZIEL

:QUELLE_NEUER
echo Die Datei zeichnung.txt im Quellverzeichniss ist aktueller.
echo 1 ins Zielverzeichniss kopieren?
echo 2 Abbrechen?
echo 3 Ersetzen?
echo.

choice /C:123
if errorlevel 3 goto QUELLE_ZIEL
if errorlevel 2 goto abbrechen
if errorlevel 1 goto ZIEL_QUELLE

:QUELLE_ZIEL
xcopy c:\QUELLE\zeichnung.txt c:\ZIEL
goto ende

:Abbrechen
goto ende

:ZIEL_QUELLE
xcopy c:\ZIEL\Zeichnung.txt c:\QUELLE\%1
goto ende


:FILE_FALSE
xcopy C:\quelle\%1 C:\ZIEL\%1
echo.

goto ende

:ende
pause
Mitglied: bastla
bastla 11.08.2008 um 07:49:05 Uhr
Goto Top
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 face-wink)?

Grüße
bastla
Mitglied: EnricoS
EnricoS 11.08.2008 um 07:58:09 Uhr
Goto Top
Ja soll es jedesmal eigentlich.
ich denke mal schon das neuere in die Quelle .Aber das soll der nutzer dann entscheiden können.Mir fehlt im eigentlichen nur noch das mit dem vergleichen der beiden Ordner .
Wie könnte man das am besten machen und wäresehr froh über vorschläge von euch.

So ist es bis jetzt

@echo off

if exist C:\quelle\%1 goto FILE_TRUE

if not exist C:\quelle\%1 goto FILE_FALSE

:FILE_TRUE
C:\quelle\zeichnung.txt /tw > C:\ziel\zeichnung.txt goto :QUELLE_NEUER else :ZIEL_NEUER

:ZIEL_NEUER
echo Die Datei Zeichnung.txt im Zielverzeichniss ist aktueller.
echo 1 Ersetzen?
echo 2 Abbrechen?
echo 3 ins Quellverzeichniss kopieren?
echo.

choice /C:123
if errorlevel 3 goto ZIEL_QUELLE
if errorlevel 2 goto abbrechen
if errorlevel 1 goto QUELLE_ZIEL

:QUELLE_NEUER
echo Die Datei Zeichnung.txt im Quellverzeichniss ist aktueller.
echo 1 ins Zielverzeichniss kopieren?
echo 2 Abbrechen?
echo 3 Ersetzen?
echo.

choice /C:123
if errorlevel 3 goto QUELLE_ZIEL
if errorlevel 2 goto abbrechen
if errorlevel 1 goto ZIEL_QUELLE

:QUELLE_ZIEL
xcopy c:\QUELLE\zeichnung.txt c:\ZIEL
goto ende

:Abbrechen
goto ende

:ZIEL_QUELLE
xcopy c:\ZIEL\Zeichnung.txt c:\QUELLE\zeichnung.txt
goto ende


:FILE_FALSE
xcopy C:\quelle\zeichnung.txt C:\ZIEL\zeichnung.txt
echo.

goto ende

:ende
pause
Mitglied: bastla
bastla 11.08.2008 um 07:59:06 Uhr
Goto Top
Hallo EnricoS!

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
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
Mitglied: EnricoS
EnricoS 11.08.2008 um 08:32:54 Uhr
Goto Top
würde es noch ne andere variante geben?So sollte es nicht sein den er soll fragen ob die datei ersetzt werden soll nicht den vielleicht ist die neue datei eine ausnahme und murde nur für den einen fall geändert und sonst braucht man immer die Quell datei.
Mitglied: bastla
bastla 11.08.2008 um 08:42:35 Uhr
Goto Top
Hallo EnricoS!

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