8
votes

Les commandes intégrées MS-DOS renvoient-elles un code d'erreur \ sortie?

Je n'ai pas trouvé de moyen d'obtenir le code d'erreur, s'il est retourné, de RMDIR. Il semble que les commandes internes MS-DOS ne renvoient pas de code d'erreur. Quelqu'un peut-il confirmer cela?

Comment un script qui utilise ces commandes sache-t-il si les commandes réussissent ou échouent afin de décider de la prochaine étape? Le moyen le plus simple est de lire leur code de retour, s'il est retourné.

Merci d'avance.


2 commentaires

J'ai eu un commentaire ici indiquant les commandes DOS do les codes d'erreur de retour , mais je vois maintenant des réponses et mes propres tests que ce n'est pas une chose toujours pour toutes les commandes (et je suppose que cela peut se rapporter à de nombreux " Commandes DOS "appelez simplement des exécutables externes dans le% de% de path, quels exécutables peuvent varier apparemment dans les codes d'erreur de retour correctement. Je ne voudrais pas que les commandes internes CMD n'étaient pas incompatibles avec des codes d'erreur, cependant, cependant;)


Un autre exemple de ms faire du travail moche. Tout outil correctement écrit donne des codes de sortie utiles, mais non ... pas Microsoft; Ils sont trop cool pour cela. > 8 ^ (


4 Réponses :


16
votes

Non, il semble de ne pas le faire. Si vous ECHO% ERRORLEVEL% CODE> Après avoir réussi ou échoué rmdir code>, vous obtenez 0 code> dans les deux cas:

c:\pax> mkdir qqq
c:\pax> cmd /c rmdir qqq
c:\pax> echo %errorlevel%
0
c:\pax> cmd /c rmdir qqq
The system cannot find the file specified.
c:\pax> echo %errorlevel%
2


3 commentaires

Si rmdir dodgy échoue, mais il y a un fichier nommé "Dodgy", alors vous avez des problèmes :) Pour tester l'existence d'une utilisation d'un répertoire: si existe "dodgy \." / code>


@Wouter, bon conseil, changé en costume, bien que probablement bien en dehors de tout SLAS convenu :-)


@paxdiablo Ils renvoient des codes de sortie, c'est juste le niveau d'erreur qui n'est pas défini pour une raison quelconque, mais si vous passez par cmd / c, vous pouvez réellement obtenir les codes



4
votes

RMDIR renvoyé 0 lors de la réussite ou échouée. Il semble intuitif qu'il devrait renvoyer un code d'erreur. Cependant, d'autres commandes internes font (au moins des commandes MKDIR et DIR que j'ai testées).


0 commentaires

5
votes
md test
2>nul rmdir test&&echo ok||echo err
2>nul rmdir test&&echo ok||echo err
This prints ok for the first rmdir and err for the second.rmdir is an internal cmd.exe command so %errorlevel% is probably not updated.

0 commentaires

0
votes

Ils le font, il est difficile de trouver les documents pour des commandes spécifiques, mais voici la preuve que rmdir (qui selon MS Docs ici n'est pas les codes de sortie de retour) définit réellement le code de sortie : xxx

la sortie sera 2 si le répertoire n'existe pas, il existe d'autres codes pour les problèmes d'autorisation, etc.


2 commentaires

Ce script PowerShell est-il? Ce serait différent de DOS (par la question).


PowerShell est simplement utilisé pour démarrer CMD et lire le code de sortie de CMD pour prouver qu'il est propagé par la commande 'rmdir'. Vous pouvez utiliser n'importe quelle autre langue pour faire la même chose, la déclaration reste la même - les commandes DOS renvoient des codes de sortie