hoerms76
Goto Top

Batch Dateien prüfen und kopieren

Ich habe ein Problem!
Ich will ein Batch schreiben, welches Dateien im Netzwerk mit Dateien auf C: vergleicht, wenn die Dateien identisch sind (speicherdatum komplett gleich)passiert nichts wenn Speicherdatum jünger oder älter ist, oder die Datei in c: nicht existiert wird sie vom Laufwerk auf c: kopiert. Mit xcopy bekomme ich es nicht hin, weil dort nur ältere Dateien aktualisiert werden können!
Wer kann mir ein bischen unter die arme greifen?

Content-ID: 112198

Url: https://administrator.de/forum/batch-dateien-pruefen-und-kopieren-112198.html

Ausgedruckt am: 13.04.2025 um 16:04 Uhr

Woolfsmann
Woolfsmann 24.03.2009 um 08:15:55 Uhr
Goto Top
Hi,

mit robocopy müste es gehen

befehle müste ungefähr so aussehen

robocopy <quelle> <ziel> /MIR

robocopy kann es sicher bin mir nur nicht sicher ob die optionen stimmen. Kannst du aber in dem Link nachlesen
http://www.wintotal.de/Artikel/robocopy/robocopy.php

gruß
manuel-r
manuel-r 24.03.2009 um 09:50:38 Uhr
Goto Top
Weil "einfach" einfach immer gut ist würde ich - wenn die fraglichen Datein nicht etliche MB/GB groß sind - pauschal immer kopieren. Macht am wenigsten Mühe und funktioniert zuverlässig. Ansonsten halt wie schon angesprochen Robocopy.

Manuel
hoerms76
hoerms76 24.03.2009 um 11:13:04 Uhr
Goto Top
Ich will halt gerade vermeiden, das immer 200MB aus dem Netzwerk kopiert werden! Deshalb nur die geänderten Dateien. Es kann aber auch sein ein User hat die Datei auf seinem Rechner geändert, deshalb wenn Datei gleich ist nicht kopieren, ansonsten schon! Robocopy ist schlecht , weil wir mit NT arbeiten!

Vielleicht noch ne Lösung?

Gruß Hoerms76
manuel-r
manuel-r 24.03.2009 um 11:21:38 Uhr
Goto Top
Wie wäre es alternativ mit xcopy und der Option /D:d-m-j
Für das Datum setzt du das Datum des letzten Kopiervorgangs. Das sollte funktionieren denke ich.

Manuel
hoerms76
hoerms76 24.03.2009 um 11:40:08 Uhr
Goto Top
tut mir leid wenn ich nerve, aber er kopiert dann zwar wenn auf dem Laufwerk eine neuere Datei liegt als auf dem rechner, aber es kann sein das ein User irgendwas in der Datei auf dem Rechner ändert, dann muß trotzdem vom Laufwerk kopiert werden, und auf c: überschrieben, also hatte ich gedacht vorab die dateien mit FC vergleichen, und dann bei unterschieden kopieren. Ich komm halt mit dem Batch nicht weiter...

Gruß Hoerms76
manuel-r
manuel-r 24.03.2009 um 11:53:34 Uhr
Goto Top
Dann probier's mal mit
fc /b <quelle>\datei.xyz <ziel>\datei.xyz
if errorlevel 1 copy /y <quelle>\datei.xyz <ziel>\datei.xyz
hoerms76
hoerms76 24.03.2009 um 11:58:57 Uhr
Goto Top
klingt schon mal gut, und jetzt noch für alle Dateien in einem Ordner ?
Wäre super!!
Gruß Hoerms76
manuel-r
manuel-r 24.03.2009, aktualisiert am 18.10.2012 um 18:37:53 Uhr
Goto Top
Ich hab für dich mal die Beitrag gefunden, der dir dabei bestimmt hilft.
miniversum
miniversum 24.03.2009 um 19:45:24 Uhr
Goto Top
Mal ne ungetestete Skizze wie es geht:
set "hdd=C:\ordner"  
set "netz=x:\ordner"  
xcopy /d "%netz%\*.*" "%hdd%"  
FOR /F "delims=" %%i in ('xcopy /L /d "%hdd%\*.*" "%netz%"') do copy /y "%netz%\%%~nxi" "%hdd%"  

Oder mit der FC Lösung:
set "hdd=C:\ordner"  
set "netz=x:\ordner"  
xcopy /d "%netz%\*.*" "%hdd%"  
FOR /F "delims=" %%i in ('dir /b "%netz%\*.*"') do fc /b "%netz%\%%i" "%hdd%\%%i" >NUL 2>NUL || copy /y "%netz%\%%i" "%hdd%"  
hoerms76
hoerms76 26.03.2009 um 10:41:22 Uhr
Goto Top
Super! Mit Xcopy-Befehl klappt alles gut!
Ich möchte jetzt nur noch vorab mein "hdd" bereinigen.
Das heißt alle Dateien die es im Laufwerk nicht mehr gibt, aber auf hdd löschen.
kann ich das vorab noch einbauen?

Gruß Hoerms76
miniversum
miniversum 26.03.2009 um 17:41:25 Uhr
Goto Top
Dann füge vor der 4. Zeile folgende Zeile ein:
FOR /F "delims=" %%i in ('dir /B "%hdd%"') do if not exist "%netz%\%%~nxi" ECHO del "%hdd%\%%~nxi"  
Das ganze ist ungetestet! Daher ist das ECHO drin. Du sieht dann also was er macht. Sieht das gut aus einfach das ECHO weglassen.
hoerms76
hoerms76 27.03.2009 um 16:10:10 Uhr
Goto Top
Echt klasse!! Batch läuft! Danke!
ich hab ihn folgender maßen zusammengefügt:

set "hdd=c:\123v5w\testordner"
set "netz=c:\123v5w\testlaufwerk"

xcopy "%netz%" /d /y /i /f "%hdd%"
For /f "delims=" %%i in ('dir /b "%hdd%"') do if not exist "%netz%\%%~nxi" del "%hdd%\%%~nxi"
For /f "delims=" %%i in ('xcopy "%hdd%" /y /l /d "%netz%"') do copy /y "%netz%\%%~nxi" "%hdd%"

Er bring nur bei der letzten Zeile eine Fehlermeldung weil er logischerweise beim xcopy die Zeile "1 Datei kopiert" nicht findet, kann ich das noch abstellen, dann wär es wirklich perfekt!
miniversum
miniversum 27.03.2009 um 18:03:50 Uhr
Goto Top
Ändere die Letzte Zeile von
For /f "delims=" %%i in ('xcopy "%hdd%" /y /l /d "%netz%"') do copy /y "%netz%\%%~nxi" "%hdd%"
in
For /f "delims=" %%i in ('xcopy "%hdd%" /y /l /d "%netz%"^|findstr /V /E "Datei(en) kopiert"') do copy /y "%netz%\%%~nxi" "%hdd%"
Dann sollte die Meldung nicht mehr kommen.
hoerms76
hoerms76 30.03.2009 um 10:09:44 Uhr
Goto Top
ich bin begeistert !!
Danke nochmal!
Gruß Hoerms76
hoerms76
hoerms76 01.04.2009 um 15:00:11 Uhr
Goto Top
Hi, ich hätte gern noch ne kleine Hilfe:

Bevor mein Batch läuft würde ich gern eine Datei mit einer anderen vergleichen, wenn sie identisch sind macht das Batch nichts, ansonsten siehe oben.

FC /b "%netz%"\protokol.xls "%hdd%"\protokol.xls
IF not errorlevel 1 goto ende

ich hab das so gelöst, das klappt auch, ich möchte nur die FC "Ausgaben" nicht sehen. geht das irgendwie?

Gruß hoerms76
miniversum
miniversum 01.04.2009 um 18:06:24 Uhr
Goto Top
Mit > kannst du die ausgaben umleiten.
NUL leitet Ausgaben ins "Nichts" um.
2>leitet Fehlermeldungen um.
Daraus ergibt nicht das:
FC /b "%netz%"\protokol.xls "%hdd%"\protokol.xls >NUL 2>NUL  
IF not errorlevel 1 goto ende
PS: das ende kanst du dir sparen. Es gibt noch die Spungmarke :eof die imemr ans ende der Datei führt. Die brauchst ud auch nicht extra hinzuschreiben.
FC /b "%netz%"\protokol.xls "%hdd%"\protokol.xls >NUL 2>NUL  
IF not errorlevel 1 goto:eof