xcopy: déplacer des fichiers au lieu de les copier?

11

Je voudrais utiliser xcopypour déplacer, pas pour copier des fichiers sur un réseau avec l'indicateur Verify. Je n'ai pas pu trouver un interrupteur sur xcopy pour déplacer des fichiers, est-ce que xmoveje peux utiliser cela verify?

Pour le moment, j'utilise xcopy /D /Vmais je dois me débarrasser des fichiers à la source uniquement lorsqu'il est vérifié qu'un fichier a été copié avec succès vers la destination.

JBurace
la source
1
Vous devez savoir que même l'utilisation /vne garantit pas qu'un fichier a été correctement écrit: les caches de disque et de système d'exploitation signifient qu'un fichier dans un cache d'écriture sera récupéré à partir de là avant d'avoir été validé avec succès. La seule option sûre consiste à effectuer une copie et à planifier une vérification et une suppression à une date ultérieure. Heuristiquement, je dirais que 5 minutes seraient suffisantes, mais il n'y a pas de règle stricte et rapide: cela dépend de l'activité du disque et de la taille des caches (je parle comme celui qui a rencontré des échecs d'écriture en cache).
AFH

Réponses:

11

Vous devriez vérifier robocopy, il est beaucoup plus puissant que xcopy. Vous pouvez facilement déplacer des fichiers avec /MOVou /MOVE.

Pour déplacer des fichiers uniquement (supprimer de la source après la copie)

robocopy from_folder to_folder files_to_copy /MOV

Pour déplacer des fichiers et des répertoires (supprimer de la source après la copie)

robocopy from_folder to_folder files_to_copy /MOVE

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

je suis l'homme
la source
2
Robocopy n'a pas d' verifyaussi loin que je puisse voir.
JBurace
@JBurace Si vous regardez le lien je l' ai posté dit: /MOVE : Move files and dirs (delete from source after copying). S'il ne copie pas, il ne supprimera pas la source.
imtheman
2
Que se passe-t-il s'il est déplacé, mais que la taille du fichier ne correspond pas? C'est pourquoi je dois faire un verify. Je ne vois rien dans les informations de robocopy indiquant qu'il vérifie réellement les deux tailles de fichiers pour s'assurer qu'il n'a pas été simplement déplacé mais déplacé correctement.
JBurace
@JBurace Je ne pense pas que cela fonctionne comme ça. S'il ne copie pas tout le fichier, il agira comme si rien n'était copié et ne supprimera donc pas la source.
imtheman
1

Vous pouvez utiliser un fichier de Xcopycommandes pour exécuter votre commande avec la vérification, suivie d'une vérification du niveau d'erreur renvoyé par Xcopy pour déterminer si les fichiers ont été copiés avec succès ou non. Si tel est le cas, supprimez la source.

De la documentation 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.

Exemple de lot:

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
la source
Est -ce errorlevelencore du travail si je fais: dir args && xcopy args >> logfile.txt? Ou sera errorlevelle résultat de dir?
JBurace
Il contiendra le résultat de la dernière exécution de la commande. Vous pouvez le tester avec un simple fichier batch en tant que tel: pastebin.com/6GwNA7MP
Ƭᴇcʜιᴇ007
if errorlevel 0Déclenche TOUJOURS. Parce qu'il vérifie vraiment if errorlevel >= 0, vous devriez plutôt vérifier le cas d'erreur if errorlevel 1 ( ... failure case ... ) else ( ... success case ... ). Ou, si vous préférez le style if not errorlevel 0 (... success case ... )Ou, si vous préférez le styleif %ERRORLEVEL% EQU 0 ( ... success case ... )
Jesse Chisholm
Bien sûr, ce serait beaucoup moins efficace (le mouvement est super bon marché dans le même disque dur) ...
Ohad Schneider