robocopy codes de sortie … est-ce que robocopy est simplement buggé ou est-ce que je manque quelque chose?

Nous utilisons robocopy (version du fichier 5.1.10.1027) pour mettre en miroir les arborescences de répertoires. robocopy est appelé par un script python plutôt que manuellement. Nous nous appuyons sur les codes de sortie de robocopy pour déterminer si l’opération a réussi ou non. En cas de succès, notre script procède à beaucoup d’autres trucs de fantaisie. Sinon il avorte immédiatement.

Le code de sortie de robocopy serait un champ de bits avec les indicateurs suivants ( https://ss64.com/nt/robocopy-exit.html ):

Hex Decimal Signification si défini

0×00 0 No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized. 0×01 1 One or more files were copied successfully (that is, new files have arrived). 0×02 2 Some Extra files or directories were detected. No files were copied Examine the output log for details. 0×04 4 Some Mismatched files or directories were detected. Examine the output log. Housekeeping might be required. 0×08 8 Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further. 0×10 16 Serious error. Robocopy did not copy any files. Either a usage error or an error due to insufficient access privileges on the source or destination directories. 

Si l’on se base sur cette information, tout code de sortie supérieur à 7 peut être considéré comme signifiant qu’au moins une erreur s’est produite, c’est donc le critère que notre script utilise pour déterminer si robocopy a réussi.

Maintenant, nous avons rencontré un problème où robocopy ne parvient pas à supprimer un fichier dans la destination qui n’est plus présente dans la source, en raison d’un problème d’access refusé:

  *EXTRA File 661 AdminTable_version.h 2017/06/13 02:38:08 ERROR 5 (0x00000005) Deleting Extra File E:\fw_cu\build\output\AdminTable_version.h 

L’access est refusé.

mais retourne ensuite avec un code de sortie de 3 de toute façon. En d’autres termes, les indicateurs 0x01 et 0x02 sont définis, ce qui signifie:

 One or more files were copied successfully (that is, new files have arrived). 

et

 Some Extra files or directories were detected. No files were copied Examine the output log for details. 

Nous utilisons la ligne de commande suivante:

 robocopy.exe M:\fw_cu E:\fw_cu /MIR /FFT /W:5 /NP 

Maintenant, à moins que je ne manque quelque chose, ces indicateurs de code de sortie ne transmettent pas suffisamment d’informations pour indiquer de manière fiable si l’opération a été réussie à 100% ou si robocopy ne les utilise pas systématiquement. J’ai l’impression que l’échec de la suppression d’au moins un fichier au cours d’une opération de mise en miroir justifie l’indicateur 0x08 ou 0x10.