Ich möchte xcopy
Dateien zum Verschieben verwenden und nicht über ein Netzwerk mit dem Flag "Überprüfen" kopieren. Ich konnte keinen Schalter auf xcopy finden, um Dateien zu verschieben. Gibt es einen, den xmove
ich verwenden kann verify
?
Im Moment verwende ich xcopy /D /V
aber muß die Dateien an der Quelle , um loszuwerden , nur , wenn es eine Datei überprüft wird erfolgreich auf das Ziel kopiert.
/v
nicht garantiert, dass eine Datei korrekt geschrieben wurde: Disc- und OS-Caches bedeuten, dass eine Datei in einem Schreibcache von dort abgerufen wird, bevor sie erfolgreich festgeschrieben wurde. Die einzig sichere Option besteht darin, eine Kopie zu erstellen und eine Überprüfung und Löschung zu einem späteren Zeitpunkt zu planen. Heuristisch würde ich sagen, dass 5 Minuten ausreichen würden, aber es gibt keine feste Regel: Dies hängt von der Disc-Aktivität und der Größe der Caches ab (ich spreche als einer, der auf zwischengespeicherte Schreibfehler gestoßen ist).Antworten:
Sie sollten überprüfen
robocopy
, es ist viel mächtiger alsxcopy
. Sie können Dateien einfach mit/MOV
oder verschieben/MOVE
.Nur Dateien verschieben (nach dem Kopieren aus der Quelle löschen)
Dateien und Verzeichnisse verschieben (nach dem Kopieren aus der Quelle löschen)
http://ss64.com/nt/robocopy.html
quelle
verify
so weit ich sehen kann./MOVE : Move files and dirs (delete from source after copying)
. Wenn es nicht kopiert wird, wird die Quelle nicht entfernt.verify
. Ich sehe in den Robocopy-Informationen nichts, was die beiden Dateigrößen tatsächlich überprüft, um sicherzustellen, dass sie nicht nur verschoben, sondern korrekt verschoben wurden.Sie können eine Batchdatei verwenden, um Ihren
Xcopy
Befehl mit der Überprüfung auszuführen , gefolgt von einer Überprüfung der von Xcopy zurückgegebenen Fehlerstufe, um festzustellen, ob die Dateien erfolgreich kopiert wurden oder nicht. Wenn ja, löschen Sie die Quelle.Aus der Xcopy-Dokumentation :
Beispielcharge:
quelle
errorlevel
immer noch, wenn ich mache :dir args && xcopy args >> logfile.txt
? Oder wirderrorlevel
ein Ergebnis von seindir
?if errorlevel 0
Löst IMMER aus. Da dies wirklich überprüft wirdif errorlevel >= 0
, sollten Sie stattdessen den Fehlerfall überprüfenif errorlevel 1 ( ... failure case ... ) else ( ... success case ... )
. Oder wenn Sie den Stil bevorzugenif not errorlevel 0 (... success case ... )
Oder wenn Sie den Stil bevorzugenif %ERRORLEVEL% EQU 0 ( ... success case ... )