Come impedire la chiusura automatica della console dopo l'esecuzione del file batch


510

Quale comando posso inserire alla fine di un file batch per impedire la chiusura automatica della console dopo l'esecuzione del file?


5
Sarebbe utile se esiste un modo per rilevare se un file .cmd è stato avviato facendo doppio clic nell'esploratore (quindi si desidera che si fermi alla fine) o se è stato avviato da una riga di comando già aperta. Nel caso successivo (e soprattutto se eseguito da un altro programma) non si desidera la pausa. Non ho trovato una buona soluzione per questo caso (e in genere uso una variabile if% NOPAUSE%, ma questo funziona solo per i programmi parent non per le shell paremt).
Verifica il

Risposte:


635

Nei file batch Windows / DOS:

pause

Questo stampa un bel "Press any key to continue . . . "messaggio

Oppure, se non si desidera il "Press any key to continue . . ."messaggio, procedere come segue:

pause >nul

14
Nessuno dei suggerimenti qui funziona per me quando si fa doppio clic sul file bat. È un ambiente server (e devo eseguire lo script in esso), quindi avrebbero potuto modificare il comportamento. Questo non cambia il mio obiettivo. Per mantenere la finestra di comando aperta in modo che io possa così il messaggio di errore che digita.
Henrik Erlandsson,

1
Sì, questo non funziona sempre a seconda dell'ambiente. Per una soluzione più solida vedi la mia risposta di seguito. In sostanza basta impostare / p exitkey = "Premere un tasto qualsiasi per continuare ..."
Steven Mark Ford

Fai attenzione, se qualcuno esegue lo script senza la finestra della console (ad esempio tramite vbscript), si bloccherà fino a quando non lo ucciderai tramite Task Manager.
Andry,

Se è qualcosa come Maven usa CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy

pausa funziona perfettamente qui
Davidson Lima,

141

Dipende dalla domanda esatta!

Normalmente pausefa il lavoro all'interno di un file .bat .

Se si desidera che cmd.exe non si chiuda per poter continuare a digitare, utilizzare il cmd /kcomando alla fine del file.


2
Se stai eseguendo i comandi di Windows attraverso la finestra di dialogo Esegui, metti invece cmd /kprima del tuo comando. & cmd /knon funzionerà.
Noumenon,

68

Se si desidera che cmd.exe non si chiuda e sia possibile continuare a digitare, utilizzare cmd /k

Ho appena sentito la necessità di chiarire cosa /kfa (dal sito Web di Windows):

/k : Esegue il comando specificato dalla stringa e continua.

Quindi cmd /ksenza il comando di follow-up alla fine del file bat manterremo la cmd.exefinestra aperta per un ulteriore utilizzo.

D'altra parte pausealla fine di un file batch semplicemente metterà in pausa il processo e terminerà cmd.exealla prima pressione del pulsante


24

Il modo seguente di avere comandi in un file batch aprirà le nuove finestre del prompt dei comandi e le nuove finestre non usciranno automaticamente.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
Nel mio caso, ho avuto qualche errore durante l'esecuzione del comando terminal, quindi i comandi 'pause' e 'cmd / k' non mi hanno aiutato a fermare il programma a causa dell'errore. Questo esempio mi ha aiutato a mostrare, ho un errore e mi sono anche fermato dal terminale. Grazie!
HowDoYouTellForAChild

20

Se stai usando Maven e vuoi saltare la digitazione e impedire la chiusura della console per vedere il risultato, devi usare il CALLcomando nello script, oltre a 'mvn clean install'.

In questo modo si chiuderà la console

ECHO This is the wrong exemple
mvn clean install
pause

In questo modo la console rimarrà aperta

ECHO This is the right exemple
CALL mvn clean install
pause

Se non si utilizza il CALLcomando nessuno degli esempi di passato funzionerà.


1
Molte grazie! Impedisce la chiusura del prompt in caso di comando non riuscito.
Timur Gilauri,

1
Ha funzionato per me. Volevo eseguire 2 diversi comandi in 1 file bat. ma il mio prompt si è chiuso dopo il primo comando. Mettendocall <myCommand> risolto questo problema: il mio prompt ha smesso di chiudersi dopo la prima esecuzione
Zombkey il

1
La risposta più utile
gianmarcocalbi

14

Aggiungi cmd.execome nuova riga sotto il codice che desideri eseguire:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

Questo è esattamente quello che stavo cercando, grazie! La "pausa" non funzionerà quando il tuo script Python viene bloccato. Quello che volevo è vedere un messaggio di errore. Fino ad ora ho dovuto eseguire i miei script Python attraverso la console
user70960

Ma funziona benissimo:python script.py %1 && cmd
user70960

Grazie! Questo ha aiutato! Stavo creando un file batch per eseguire applicazioni Python.
fez.tival

10

il mio modo è di scrivere un batch reale (dicendo "foo.bat") per finire il lavoro; quindi crea un altro "start.bat":

@echo off
cmd /k foo.bat

Trovo che ciò sia estremamente utile quando imposto le variabili d'ambiente una tantum.


1
Puoi semplicemente mettere cmd /k(senza alcun comando) alla fine del foo.batfile ed eseguirlo. Non hai bisogno di un start.batfile separato .
ADTC


5

inoltre pause.

set /p=

può essere utilizzato. Si aspetterà l'input dell'utente e rilascerà il flusso quando si preme invio.

o

runas /user:# "" >nul 2>&1

che farà lo stesso tranne che per l'input dell'utente, non verrà visualizzato né rimarrà nella cronologia dei comandi.


3

Possibilità 1: basta creare 2 file .bat e scrivere nel primo:

start <filename> // name of 2nd batch file
exit

Il file batch 2 è il file che non si chiuderà alla fine. Quindi ora quando apri il batch nr.1, inizierà il 2 ° e si spaccherà da solo. Al termine del 2 ° non si chiuderà del tutto (purché non si metta l'uscita alla fine)

Possibilità 2: file batch 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Quando il secondo file termina, passerà nuovamente al file 1 e ne genererà il resto. Con ciò puoi persino creare gestori di errori. Se nr.1 si arresta in modo anomalo, entra in nr.2 e lo visualizza


2

Questo piccolo trucco richiede all'utente di inserire una chiave e la memorizza nella variabile% exitkey% (questa variabile può essere chiamata come preferisci).

set /p exitkey= "Press any key to continue..."

NB: lo spazio dopo '=' è molto importante



2

So di essere in ritardo ma il mio modo preferito è:

:programend
pause>nul
GOTO programend

In questo modo l'utente non può uscire usando enter.


Penso di sì, in quanto è un modo avanzato per impedire la chiusura della console. Anche se l'utente preme un tasto, la console rimane aperta. L'utente sarà costretto ad uscire solo chiudendo la finestra della console.
decadenza,

2

Ho avuto problemi con le risposte qui, quindi ho pensato a questo, che funziona per me (TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

1

Esistono due modi per farlo a seconda del caso d'uso

1) Se si desidera che il prompt cmd di Windows rimanga aperto in modo da poter vedere il risultato dell'esecuzione e chiuderlo in seguito; uso

pause

2) se si desidera che il prompt di cmd di Windows rimanga aperto e consenta di eseguire alcune parole di comando; uso

cmd

inserisci qui la descrizione dell'immagine


1

Facile, aggiungi cmd alla tua ultima linea di mazza, MA! se ripristini o cancelli il tuo percorso di sistema, devi iniziare il tuo cmd con il percorso completo, come:

%windir%\system32\cmd.exe

Ad esempio, ho un file bat per ripristinare jdk alla vecchia versione come questa:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

da quando ho ripristinato il percorso di sistema, devo eseguire cmd con il percorso completo o il sistema non riesce a trovare cmd.exe, non eseguirà cmd e chiuderà semplicemente la finestra e non è possibile visualizzare l'errore msg .

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.