Gestion de la copie asynchrone en ligne de commande
par
, 19/03/2015 à 15h47 (693 Affichages)
La copie des fichiers ce fait de manière asynchrone. C'est à dire que suite à une demande de copie d'un fichier, le contrôle revient au programme demandeur avant que l'opération n'est réellement était effectué. Cela peut dans certains cas poser problème, en particulier lorsque les opérations suivantes portent sur le même fichier. Exemple:
Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @echo off copy "%cd%\test.txt" "%cd%\foo\test.txt" del /q "%cd%\test.txt" pause
Ici la solution est simple puisque ce code reproduit l'opération effectué par la commande "move". Il faudra donc remplacer les commandes "copy" et "del" par "move". Dans d'autres cas, la solution est plus alambiqué du fait des opérations voulues.
Par exemple lors d'un déploiement d'une image Windows hors connexion, l'utilisation de la commande "copy" peut provoquer des erreurs lors du démontage de l'image.
Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @echo off dism /Mount-Image /ImageFile:"%cd%\myimage.wim" /index:1 /MountDir:"%cd%\offline" copy "%cd%\test.exe" "%cd%\offline\test.exe" dism /Unmount-Image /MountDir:"%cd%\offline" /commit pause
Ce code produira toujours une erreur du fait que le script continuera a s'exécuter alors que le fichier "%cd%\test.exe" n'a pas encore finit d'être copié. La solution est d'utilisé le paramètre "/v" dans la commande "copy", celui-ci force la vérification du fichier copié. Cette opération étant effectué par la commande "copy", le contrôle ne reviendra pas au script tant que la copie n'est pas effectué.
Voilà, bon script à tous