xcopy: Dateien verschieben statt kopieren?

11

Ich möchte xcopyDateien 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 xmoveich verwenden kann verify?

Im Moment verwende ich xcopy /D /Vaber muß die Dateien an der Quelle , um loszuwerden , nur , wenn es eine Datei überprüft wird erfolgreich auf das Ziel kopiert.

JBurace
quelle
1
Sie sollten sich bewusst sein, dass selbst die Verwendung /vnicht 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).
AFH

Antworten:

11

Sie sollten überprüfen robocopy, es ist viel mächtiger als xcopy. Sie können Dateien einfach mit /MOVoder verschieben /MOVE.

Nur Dateien verschieben (nach dem Kopieren aus der Quelle löschen)

robocopy from_folder to_folder files_to_copy /MOV

Dateien und Verzeichnisse verschieben (nach dem Kopieren aus der Quelle löschen)

robocopy from_folder to_folder files_to_copy /MOVE

http://ss64.com/nt/robocopy.html

ich bin der Mann
quelle
2
Robocopy hat nicht verifyso weit ich sehen kann.
JBurace
@JBurace Wenn Sie sich den Link ansehen, den ich gepostet habe, heißt es : /MOVE : Move files and dirs (delete from source after copying). Wenn es nicht kopiert wird, wird die Quelle nicht entfernt.
Imtheman
2
Was passiert, wenn es verschoben wird, die Dateigröße jedoch nicht übereinstimmt? Deshalb muss ich eine machen 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.
JBurace
@JBurace Ich glaube nicht, dass es so funktioniert. Wenn nicht die gesamte Datei kopiert wird, verhält es sich so, als ob überhaupt nichts kopiert wurde, und entfernt daher nicht die Quelle.
Imtheman
1

Sie können eine Batchdatei verwenden, um Ihren XcopyBefehl 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 :

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

Beispielcharge:

Rem Attempt file copy...
xcopy /D /V %1 %2

Rem Check result code and if it was successful (0), delete the source.
if errorlevel 0 (
    echo Copy completed successfully
    del /Q %1
    exit /B
)

Rem Not Errorlevel 0...
echo Copy failed for some reason.
Ƭᴇcʜιᴇ007
quelle
Funktioniert errorlevelimmer noch, wenn ich mache : dir args && xcopy args >> logfile.txt? Oder wird errorlevelein Ergebnis von sein dir?
JBurace
Es enthält das Ergebnis des letzten Befehlslaufs. Sie können es mit einer einfachen Batch - Datei testen , wie zum Beispiel: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007
if errorlevel 0Löst IMMER aus. Da dies wirklich überprüft wird if errorlevel >= 0, sollten Sie stattdessen den Fehlerfall überprüfen if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Oder wenn Sie den Stil bevorzugen if not errorlevel 0 (... success case ... )Oder wenn Sie den Stil bevorzugenif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm
Natürlich wäre dies weitaus weniger effizient (Umzug ist auf derselben Festplatte supergünstig) ...
Ohad Schneider