comment puis-je faire continuer mon fichier .bat après une erreur

30

J'ai un fichier .bat dans Windows qui fait trois choses

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Parfois cmd1 peut échouer et c'est très bien, je voudrais continuer et exécuter cmd2 et cmd3. Mais ma batte s'arrête à cmd1. Comment puis-je éviter ça?

Mise à jour pour plus de clarté - ce ne sont pas d'autres fichiers .bat, ce sont des commandes exe. J'espère que je n'ai pas besoin de construire une arborescence de fichiers .bat juste pour y parvenir.

ConfusedNoob
la source
Vous devriez pouvoir démarrer la commande à l'aide de cmd /C.
Der Hochstapler
1
Vous devez montrer un exemple de code spécifique de ce qui ne fonctionne pas. Les fichiers de commandes ne se terminent normalement pas automatiquement si une commande échoue avec une erreur. Les fichiers batch se terminent en cas d'erreur de syntaxe. Si votre code se termine sur une erreur exe, alors il doit y avoir de la logique dans votre code qui provoque ce comportement.
dbenham

Réponses:

18

Une autre option consiste à utiliser l'amperstand ( &)

cmd1 & cmd2 & cmd3

Si vous utilisez un double, il ne continue que si la commande précédente se termine avec succès ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Si vous utilisez un double pipe ( ||), il n'exécute la commande suivante que si la précédente se termine avec un code d'erreur ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3

Canadian Luke REINSTATE MONICA
la source
Puis-je faire cela lors du passage d'arguments également? J'ai juste essayé et ça n'a pas fonctionné.
ConfusedNoob
@ConfusedNoob Je fais tout le temps ... J'ai une CHKDSKcommande, avec des arguments, qui fonctionne. Je tape check D: & check E: & check F:et ça marche. Les arguments du fichier BAT incluent les /perf /f /r /b /scancommutateurs
Canadian Luke REINSTATE MONICA
2
bon! m'a donné une idée de la façon d'implémenter plusieurs tentatives: cmd || cmd || ... exécutera la prochaine cmd jusqu'à ce qu'il réussisse
iTake
1
Cela rend les longs scripts illisibles, n'y a-t-il pas d'autre moyen?
jan
1
@CanadianLuke Well batch est le framework batch de Windows. Comment exécutez-vous des centaines de commandes de manière non interactive? Y a-t-il une meilleure approche dans le Power Shell? Est-ce pire de déménager là-bas?
jan
11

Présumer les cmds sont d'autres fichiers .bat empiler les commandes comme ceci:

 call cmd1
 call cmd2
 call cmd3
mdpc
la source
10

Cela a fonctionné pour moi:

cmd.exe /c cmd1 arg1
cmd2
...

Cela permet cmd.exed'exécuter la commande dans une nouvelle instance de l'interpréteur de commandes Windows, donc une commande ayant échoué n'interrompt pas le script de commandes. L' /cindicateur indique à l'interpréteur de se terminer dès que la commande a terminé son exécution.

cmd2s'exécute même si la première commande échoue. Voir à cmd /?partir de l'invite de commandes Windows pour plus d'informations.

Joseph238
la source