2017-03-24 6 views
0

Windows 7 64 bitstests errorlevel dans un fichier batch ne fait

retour ne devrait j'écrire un fichier de commandes qui copie un fichier à partir d'un répertoire à un autre supprime le fichier. Il y a des moments où le fichier que je souhaite copier est écrit par un autre programme lorsque le fichier batch est exécuté et par conséquent émet l'erreur "Le processus ne peut pas accéder au fichier parce qu'il est utilisé par un autre processus." Je m'attendais à être en mesure de faire un test de niveau d'erreur sur cette condition et quand il existe, sauter à un délai, puis réessayer. Je suis incapable d'obtenir un test de type IF ERRORLEVEL 1 pour me donner une condition 1 afin que je puisse sauter à mon retard. J'ai essayé toutes sortes de variations en utilisant% autour errorlevel etc. Je n'arrive pas à l'obtenir pour produire un résultat non 0 même sachez qu'il produit l'erreur "Le processus ne peut pas accéder au fichier ...". Je jure que j'ai eu ce travail à un moment mais je ne peux pas pour la vie de moi comprendre pourquoi il ne fonctionne plus. J'ai même essayé un test beaucoup plus simple ci-dessous et il ne verra pas la commande failed failed comme un niveau d'erreur non nul. Comment puis-je construire un test de niveau d'erreur correct qui va ramasser la commande de suppression défaillante et me permettre de passer à un retard?

:start 
copy c:\users\pc\documents\recordings\*.mp3 c:\recordings 
del c:\users\pc\documents\recordings\*.mp3 
if errorlevel 1 goto delay 
goto start 
:delay 
echo delay 
ping 1.1.1.1 > nul 
goto start 

Répondre

0

Eh bien, j'ai été en mesure de venir à cette façon un peu différente. Après avoir cherché, j'ai trouvé du code qui me permettra de faire ce que je veux. Après l'avoir intégré dans mon script beaucoup plus grand, je suis capable de sauter à un délai, puis réessayez jusqu'à ce que le fichier n'est plus verrouillé. Je suis toutefois perplexe quant à la raison pour laquelle je n'ai pas réussi à obtenir une vérification au niveau d'erreur pour que je puisse travailler correctement. Je jure que j'avais travaillé auparavant, mais que je n'ai pas réussi à le faire fonctionner à nouveau. J'ai fait beaucoup de recherches et je n'ai pas vraiment trouvé de réponse définitive. La vérification errorlevel aurait été beaucoup plus simple si cela avait fonctionné.

--- mise à jour ---

Je suis allé chercher et a trouvé la commande findstr et jouer avec un code est venu avec ce qui est une autre méthode. Je "verrouille" le fichier en utilisant l'attribut read only qui affiche un message d'erreur différent "Access is denied" mais j'utilise findstr pour rechercher le code d'erreur qui est redirigé vers tmp et s'il y a une chose à faire, si c'est non, fais un autre. Ça semble fonctionner. Je pourrais intégrer cela dans mon code pour voir comment cela fonctionne.

@echo off 
cls 
:start 
del c:\recording.mp3 2> tmp > nul 
findstr "Access" tmp > nul 
if %ERRORLEVEL% EQU 0 GOTO delay 
ECHO NO DELAY 
ping 1.1.1.1 > nul 
goto start 
:delay 
echo DELAY 
ping 1.1.1.1 -n 1 > nul 
goto start