xcopy: spostare i file anziché copiarli?


11

Vorrei utilizzare xcopyper spostare, non copiare i file in una rete con il flag Verifica. Non sono riuscito a trovare un interruttore su xcopy per spostare i file, c'è un xmoveche posso usare che ha verify?

Al momento sto usando, xcopy /D /Vma ho bisogno di sbarazzarmi dei file alla fonte solo quando viene verificato che un file sia stato copiato correttamente nella destinazione.


1
È necessario essere consapevoli del fatto che anche l'utilizzo /vnon garantisce che un file sia stato scritto correttamente: le cache del disco e del sistema operativo significano che un file in una cache di scrittura verrà recuperato da lì prima di essere eseguito correttamente. L'unica opzione sicura è fare una copia e pianificare una verifica ed eliminazione in futuro. Euristicamente direi che 5 minuti sarebbero sufficienti, ma non esiste una regola rigida: dipende dall'attività del disco e dalle dimensioni delle cache (parlo come uno che ha riscontrato errori di scrittura nella cache).
AFH,

Risposte:


11

Dovresti dare un'occhiata robocopy, è molto più potente di xcopy. Puoi spostare facilmente i file con /MOVo /MOVE.

Per spostare solo i file (elimina dall'origine dopo la copia)

robocopy from_folder to_folder files_to_copy /MOV

Per spostare file e directory (elimina dall'origine dopo la copia)

robocopy from_folder to_folder files_to_copy /MOVE

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


2
Robocopy non ha verifyper quanto posso vedere.
JBurace,

@JBurace Se guardate il link che ho postato afferma: /MOVE : Move files and dirs (delete from source after copying). Se non viene copiato, non rimuoverà la fonte.
imtheman,

2
Cosa succede se viene spostato, ma la dimensione del file non corrisponde? Questo è il motivo per cui devo fare un verify. Non vedo nulla nelle informazioni di robocopy che verifichi effettivamente le due dimensioni del file per assicurarsi che non sia stato semplicemente spostato ma spostato correttamente.
JBurace,

@JBurace Non penso che funzioni così. Se non copia tutto il file, agirà come se nulla fosse copiato e quindi non rimuoverà l'origine.
imtheman,

1

È possibile utilizzare un file batch per eseguire il Xcopycomando con la verifica, seguito da un controllo del livello di errore restituito da Xcopy per determinare se i file sono stati copiati correttamente o meno. In tal caso, eliminare la fonte.

Dalla documentazione di Xcopy :

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.

Esempio di lotto:

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.

Funziona errorlevelancora se lo sto facendo dir args && xcopy args >> logfile.txt:? O sarà il errorlevelrisultato di dir?
JBurace,

Conterrà il risultato dell'ultima esecuzione del comando. Puoi provarlo con un semplice file batch come tale: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007

if errorlevel 0Si attiva SEMPRE. Perché sta davvero controllando, if errorlevel >= 0quindi dovresti invece controllare il caso di errore if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Oppure, se preferisci lo stile if not errorlevel 0 (... success case ... )Oppure, se preferisci lo stileif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm l'

Naturalmente questo sarebbe molto meno efficiente (la mossa è super economica nello stesso disco rigido) ...
Ohad Schneider
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.