2013-02-16 8 views
12

Sto scrivendo un file batch che convalida un paio di file. Quando uno dei file non è valido, voglio che lo script batch si fermi e restituisca un codice di errore> 0. Il codice sottostante sembra fare il lavoro, ma chiamando "ESCI 2" chiude la finestra del prompt dei comandi in cui è in esecuzione lo script.Come restituire un codice di errore senza chiudere la finestra del prompt dei comandi?

:Validate 
SETLOCAL 
Validator %1 
IF %ERRORLEVEL% GEQ 1 EXIT 2 
ENDLOCAL 

Qualche idea su come restituire un codice di errore senza chiudere il prompt dei comandi?

+0

Per restituire tutto, deve finire ... – vonbrand

risposta

32

per ottenere aiuto per il comando prompt dei comandi utilizzare il loro /? opzione. Exit /? spettacoli:

Termina il programma CMD.EXE (interprete dei comandi) o la corrente script batch .

EXIT [/ B] [exitCode]

/B specifica per uscire allo script batch corrente invece di CMD.EXE. Se eseguito all'esterno di uno script batch, lo uscirà da CMD.EXE

exitCode specifica un numero numerico. se viene specificato/B, imposta ERRORLEVEL quel numero. Se si esce da CMD.EXE, imposta il codice di uscita del processo con quel numero.

Così si vuole

IF %ERRORLEVEL% GEQ 1 EXIT /B 2 
1

È possibile utilizzare il comando pause prima di chiamare exit.

Se non ti piace il messaggio:

pause > nul 
+0

Ho appena provato e ora devo premere Invio e poi la finestra si chiude ... – Martin

+1

questo è ciò che fa pausa, sì. –

+0

Non voglio affatto chiudere la finestra. Voglio solo tornare al prompt dei comandi. – Martin

-2

Got lo stesso problema. Se stai scrivendo un batch (script della shell di windows). 'cmd' dovrebbe farlo per voi. questo non uscirà dal batch e rimarrà al prompt dei comandi. Risolto il mio problema. per es .: cd "\view\Flex Builder 3\gcc-mvn" set path="c:\view\jdk1.7.0_02\bin";"c:\view\apache-maven-3.0.5\bin";%path% mvn sonar:sonar cmd dovrebbe rimanere al prompt dopo l'esecuzione.

+2

Questa serie di comandi termina alla fine perché mvn è un file batch. Devi CHIAMARE mvn, non solo eseguirlo. Se non si usa CALL quando si chiamano altri file batch, non si tornerà mai da alcun file batch che si chiama, quello chiamato prende il sopravvento e quello originale non viene più eseguito. Inoltre, la chiamata CMD alla fine del file sta in realtà aprendo un nuovo processore di comandi, quindi ne avresti due in esecuzione anziché uno. – David