scar61
Goto Top

Nach xcopy feststellen, ob Datei kopiert wurde oder nicht

Hallo zusammen,

in einem Skript wird eine Datei nur dann kopiert, wenn sie in der Quelle neuer ist als im Ziel. Nun gibt xcopy, was aktuell für diese Aufgabe verwendet wird, in beiden Fällen ein ERRORLEVEL 0 zurück. Ich muss jedoch wissen, ob etwas kopiert wurde oder nicht. Hier im Forum gibt es eine Lösung, die hierfür die Ausgabe des Befehls analysiert: Errorlevel bei xcopy ist immer 0 obwohl keine Dateien kopiert wurden.
Da diese Lösung abhängig ist von den Sprach- und Landeseinstellungen des Systems, möchte ich gerne eine andere Lösung haben, es sei denn man kann garantieren, das die '0' in jeder möglichen Ausgabe von xcopy in allen Ländern das erste Pattern in der Standardausgabe ist.
Hat hierzu jemand eine Idee? Bei der Lösung dürfen nur Windows Boardmittel benuzt werden, die ab Windows 7 standardmässig verfügbar sind. Vielleicht kann man das ja mit robocopy auch machen, nur sehe ich da vielleicht den Wald vor lauter Bäumen nicht.

Vielen Dank für eure Mühe
Scar61

Content-ID: 310856

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 26.07.2016 um 09:13:47 Uhr
Goto Top
Probiere es doch mal hiermit:
robocopy.exe "%Quelle%" "%Ziel%" /MIR /COPYALL /ETA /R:0 /W:0  

Aber erst im Versuchsaufbau testen!
Scar61
Scar61 26.07.2016 um 09:42:27 Uhr
Goto Top
Ich habs mit einer Datei versucht, bekam aber folgenden Fehler (16):
robocopy.exe "%Quelle%" "%Ziel%" "%Datei%" /MIR /COPYALL /ETA /R:0 /W:0  

FEHLER: Sie verfügen nicht über Benutzerrechte zum Verwalten von Überwachungsprotokollen.
* Diese Rechte sind erforderlich, um Überwachungsinformationen zu kopieren (/COPY:U oder /COPYALL).

Das Quellverzeichnis ist ein UNC Pfad auf dem man nur Leserechte hat. Gibt es dafür auch noch einen Parameter?
beidermachtvongreyscull
beidermachtvongreyscull 26.07.2016 um 10:07:17 Uhr
Goto Top
Fehler von mir...

Du musst den COPYALL-Parameter rauslassen. Der kopiert alle Dateiinformationen mit. Dafür müsste die Console mit erhöhten Rechten als Admin gestartet sein.
Scar61
Scar61 26.07.2016 um 10:42:48 Uhr
Goto Top
Leider wird die Datei immer kopiert, auch wenn die Datei im Ziel jünger ist face-sad
beidermachtvongreyscull
beidermachtvongreyscull 26.07.2016 um 10:47:06 Uhr
Goto Top
Kann denn das vorkommen?

Ich verstand das so:

Quelle: Hier kommen irgendwelche Dateien an.
Ziel: Hier sollen alle Dateien hin via robocopy.

Im Zweifelsfall schau Dir eine Alternative an. Microsoft SyncToy.
Scar61
Scar61 26.07.2016 um 10:50:37 Uhr
Goto Top
Wenn ich den Schalter /XO verwende macht er das Gleiche, wie bei xcopy, nur leider habe ich wieder die selbe Situation, ERRORLEVEL ist in beiden Fällen 0 und zur Auswertung, ob die Datei kopiert wurde oder nicht muss ich sprachabhängige Ausgabe parsen face-sad
Scar61
Scar61 26.07.2016 um 10:52:06 Uhr
Goto Top
Mir geht es darum, ohne Zusatztools, sprach und Länderunabhängig herauszufinden, ob eine Datei kopiert wurde oder nicht.
beidermachtvongreyscull
Lösung beidermachtvongreyscull 26.07.2016 um 11:00:07 Uhr
Goto Top
Zitat von @Scar61:

Mir geht es darum, ohne Zusatztools, sprach und Länderunabhängig herauszufinden, ob eine Datei kopiert wurde oder nicht.
Ist es dabei relevant, wenn eine Datei im Ziel jünger ist, als die zu kopierende?
Wenn ja warum und wieso ist das so?

Denn die Frage, die sich mir stellt ist, ob Du Quelle und Ziel synchronisieren willst oder von Quelle nach Ziel kopieren willst.

Beim Sync hast Du dieses Problem des Konflikts. Was willst Du dann? Abbruch, Datei kopieren und umbenennen?
Das können die Boardmittel nicht in dieser Form, meines Wissens nach.
Scar61
Scar61 26.07.2016 um 11:31:53 Uhr
Goto Top
Wenn die Datei in der Quelle jünger ist, wird sie kopiert, weil sie ja dort verändert wurde. Nach dem Kopieren wird die Datei automatisch an die lokalen Gegebenheiten angepasst und dadurch ist sie im Ziel ja wieder automatisch jünger als die Quelle.
Beim nächsten Mal wird diese Datei dann nicht kopiert, weil sich die Quelle seit dem nicht mehr geändert hat. Jetzt möchte ich vermeiden, das der Anpassungsmechanismus gestartet wird, weil ja nichts kopiert wurde. Das wollte ich daran erkennen, dass halt 0 Dateien kopiert wurden, bei gleichzeitig erfolgreichem 'copy'.
Ich hab mittlerweile eine Lösung gefunden und zwar vergleiche ich die Dateien direkt nach einer erfolgreichen Kopie mit dem 'fc' Kommando. Sind die Dateien gleich (ERRORLEVEL = 0) wurde vorher kopiert und ich muss die Anpassung machen, ansonsten wurde sie nicht verändert und ich kann alles so lassen. face-smile

Vielen Dank für deine Hilfe
Scar61