come posso fare in modo che il mio file .bat continui dopo un errore


30

Ho un file .bat in Windows che fa tre cose

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

A volte cmd1 può fallire e va bene, vorrei continuare ed eseguire cmd2 e cmd3. Ma la mia mazza si ferma a cmd1. Come posso evitarlo?

Aggiornamento per chiarezza: questi non sono altri file .bat, sono comandi exe. Spero di non dover creare un albero di file .bat solo per raggiungere questo obiettivo.


Dovresti essere in grado di avviare il comando utilizzando cmd /C.
Der Hochstapler,

1
È necessario mostrare un esempio di codice specifico di ciò che non funziona. I file batch normalmente non terminano automaticamente se un comando fallisce con un errore. I file batch terminano se si verifica un errore di sintassi. Se il tuo codice esce da un errore exe, allora ci deve essere una logica nel tuo codice che sta causando quel comportamento.
dbenham,

Risposte:


18

Un'altra opzione è utilizzare la e commerciale ( &)

cmd1 & cmd2 & cmd3

Se si utilizza un doppio, continua solo se il comando precedente viene completato correttamente ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Se si utilizza un double pipe ( ||), esegue il comando successivo solo se il precedente viene completato con un codice di errore ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


Posso farlo anche passando args? Ho appena provato e non ha funzionato.
ConfusedNoob,

@ConfusedNoob Faccio tutto il tempo ... Ho un CHKDSKcomando, con argomenti, che funziona. Scrivo check D: & check E: & check F:e funziona. Gli argomenti del file BAT includono gli /perf /f /r /b /scanswitch
Canadian Luke REINSTATE MONICA

2
bravo! mi è venuta un'idea su come implementare diversi tentativi: cmd || cmd || ... eseguirà il prossimo cmd fino a quando non avrà successo
iTake l'

1
Questo rende illeggibili script lunghi, non c'è altro modo?
gennaio

1
@CanadianLuke Well batch è il framework batch di Windows. Come si eseguono centinaia di comandi in modo non interattivo? Esiste un approccio migliore nel power shell? È peggio trasferirsi lì?
gennaio

11

Presumendo che i cmds siano altri file .bat che impilano i comandi in questo modo:

 call cmd1
 call cmd2
 call cmd3

10

Questo ha funzionato per me:

cmd.exe /c cmd1 arg1
cmd2
...

Questo utilizza cmd.exeper eseguire il comando in una nuova istanza dell'interprete dei comandi di Windows, quindi un comando non riuscito non interrompe lo script batch. Il /cflag indica all'interprete di terminare non appena il comando termina l'esecuzione.

cmd2viene eseguito anche se il primo comando ha esito negativo. Vedere cmd /?dal prompt dei comandi di Windows per ulteriori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.