2011-01-12 21 views
39

Sto creando un semplice file batch per aiutare in alcune cose, e ho alcune istruzioni da stampare e che voglio che l'utente veda prima di uscire. Attualmente, la finestra si chiude molto rapidamente. Così ho aggiunto PAUSE alla fine del file, ma non vuole funzionare.Comando di file batch PAUSE non funziona

Ho esaminato altre domande su SO e ho controllato che le terminazioni di linea siano CRLF e che io abbia CRLF alla fine del file.

Qualche suggerimento?

+1

si sta facendo qualcosa che non va. Ho appena provato di nuovo e funziona perfettamente bene per me. –

+1

Onestamente non so perché, ma ha iniziato a lavorare oggi. Le mie scuse per questo, ma non ho idea di cosa sia successo. Non ho nemmeno cambiato la sceneggiatura! – Samaursa

risposta

3

L'ultimo comando prima della pausa viene eseguito correttamente? Mente condividendo il tuo script - almeno gli ultimi pochi comandi?

In alternativa, poiché sembra che si stia utilizzando Windows7, provare il comando Timeout e vedere se funziona.

+0

Bene, se 'pause' * è * chiamato, funzionerà. L'uso di 'timeout' invece non lo cambierà (tranne che chiama un programma separato invece di un built-in di shell).La mia ipotesi sarebbe che ci sia un 'goto: eof' o 'exit/b' da qualche parte prima di' pause' (non raro nei file batch con subroutine - dove non si possono semplicemente aggiungere comandi alla fine per farli eseguire). – Joey

+0

Cosa fai se l'ultimo comando genera un'eccezione, quale è il mio caso? –

94

Se l'ultimo comando non riesce, la pausa non funzionerà.

È possibile risolvere il problema mettendo "chiamata" dietro il comando che si sta eseguendo (qualsiasi comando sia prima della pausa), quindi la pausa funzionerà.

Così, per esempio, ho avuto un file batch phpunit che si presentava così:

phpunit tests/sometests.php 
pause 

Quando phpunit fallito appena uscito senza pause. Cambiarlo in questo modo lo fece mettere in pausa correttamente:

call phpunit tests/sometests.php 
pause 
+12

Grazie per questo, ha funzionato anche per me. In una nota a margine, sembra che non debba fallire, se il comando precedente ha un qualsiasi tipo di codice di uscita (anche in caso di successo) in esso sembra chiudere la finestra. –

+3

'CALL' ha funzionato bene anche. – JSmyth

+0

L'aggiunta di 'call' non ha avuto effetto per me sul prompt dei comandi di Windows 10 in esecuzione come amministratore. Non so perché il comando 'pause' nei miei file batch (aperto da AutoHotKey) abbia improvvisamente smesso di funzionare oggi. Non so cosa sia cambiato. Avevano lavorato per settimane. – Ryan

1

Penso di sapere dove è il problema, ho avuto lo stesso problema. Quindi, se lo stai facendo in questo modo, crei un nuovo file e metti tutte le informazioni del batch al suo interno e lo salvi come un normale testo e dopo questo basta rinominare l'estensione che non funzionerà :). Devi salvarlo tramite l'editor di testo e da lì devi scegliere "File batch (.bat; .cmd; *. Nt)" per esempio Notepad ++, è probabilmente a causa della codifica, quindi fallo come questo e io thk andrà tutto bene. GL! :)

2

Avevo problemi anche su echo ... supponendo che fosse causato da un lungo file batch ... La pausa era in esecuzione ma non era in pausa, era quasi come se fosse stato premuto un tasto dopo Pause era eseguito.

soluzioni suggerite sopra; nessuno ha funzionato.

Quindi, solo per riferimento futuro, ecco quello che ho fatto:

pratica solo "pausa> nul & & pausa> nul"; funziona sempre.

@echo off 

CALL :ForcePause "Press any key to resume." 
ECHO. 
ECHO Hello World! 
ECHO. 
CALL :ForcePause "Press any key to exit." 

EXIT 

REM You can remove echo if you don't want to pass custom string for pause 
:ForcePause 
echo %~1 
pause > nul && pause > nul 
GOTO :EOF 
+0

'pause> nul' funziona sicuramente, solo doesn ' t dare il messaggio 'premere un tasto qualsiasi ...' –

+0

Certo nel mondo perfetto, ma come ho già detto alcune volte non è quindi questa soluzione. – Zunair

0

Basta Oltre alla risposta di Tim, se si desidera che la finestra per visualizzare sempre, è possibile scrivere il file .bat come:

call phpunit tests/sometests.php 
cmd /k 
+0

Si prega di postare questo come commento alla risposta di Tim. Questa non è una risposta completa di per sé. – Marcel

+0

@ Marcel hai ridimensionato la mia risposta solo perché la lascio come risposta al posto del commento? – Justin

+0

Sì, l'ho fatto. Va bene, ma questo dovrebbe essere davvero un commento. È breve ed è decisamente strettamente correlato alla risposta. – Marcel

Problemi correlati