Come sopprimere la conferma "Terminare il lavoro di batch (Y / N)"?

In cmd, quando premiamo Ctrl + C otteniamo l'applicazione di destinazione terminata ma se l'applicazione di destinazione viene chiamata da un file batch, otteniamo la conferma "Termine di batch job (Y / N)". Non ricordo mai un'istanza in cui ho scelto di non terminare il lavoro batch. Come possiamo ignorare questa conferma?

AFAIK non è ansible in quanto questo comportmento è progettato e controllato dall'interpnetworking di command. Non esiste alcun metodo per "mappare" o addirittura "intercettarla" a less che non si decompilare e ricompilare direttamente l'interpnetworking.

Premere due volte Ctrl + C.

In questo sito ho trovato una soluzione efficace:

 script2.cmd < nul 

Per non wherer digitarlo each volta che ho fatto un secondo script chiamato script.cmd nella stessa cartella con la row sopra. Ho provato questa tecnica solo su XP, ma altri lo hanno confermato in Win 7.

Nathan aggiunge: un'altra opzione è quella di mettere il seguente codice in cima a script.cmd che fa la stessa cosa in un file:

 rem Bypass "Terminate Batch Job" prompt. if "%~1"=="-FIXED_CTRL_C" ( REM Remove the -FIXED_CTRL_C parameter SHIFT ) ELSE ( REM Run the batch with <NUL and -FIXED_CTRL_C CALL <NUL %0 -FIXED_CTRL_C %* GOTO :EOF ) 

Installare Clink e modificare l'impostazione "terminate_autoanswer". Il file delle impostazioni dovrebbe essere qui : C:\Users\<username>\AppData\Local\clink\settings .

 # name: Auto-answer terminate prompt # type: enum # Automatically answers cmd.exe's 'Terminate batch job (Y/N)?' prompts. 0 = # disabled, 1 = answer 'Y', 2 = answer 'N'. terminate_autoanswer = 1 

Questo allora "funziona solo" con qualsiasi window cmd.exe. Non è necessario modificare ciò che è in esecuzione o in altro modo, dal momento che il clink piggy-backs su cmd.exe.

Frickin 'awesome, IMO!

Se non è necessario fare nulla nel file batch dopo la fine dell'applicazione, quindi il command start assicura che il file batch sia già terminato quando si preme Ctrl-C. E dunque il messaggio non apparirà.

Per esempio:

  @echo fuori

 impostare my_command = ping.exe
 impostare my_params = -t www.google.com

 echo Comando da eseguire da 'start':% my_command%% my_params%

 :: quando NON usando / B o / WAIT, questo creerà una nuova window mentre
 :: l'esecuzione di questo file batch continuerà nella window corrente:

 inizio% my_command%% my_params%

 eco.
 echo Questa linea verrà eseguita prima che 'start' sia ancora finito.  Così questo
 il file batch echo verrà completato prima di una pressione di Ctrl-C nell'altra window.
 eco.

 :: Solo per testare utilizzare 'pausa' per mostrare "Premere qualsiasi tasto per continuare", per vedere
 :: l'output dei comandi "echo".  Assicurarsi di premere Ctrl-C nella window
 :: che esegue il command 'ping' (non in questa stessa window).  O semplicemente rimuovi
 :: la linea successiva quando confusa:

 pausa

(Testato in Windows XP.)

Ho combattuto con questo desiderio di evitare il "Terminate batch job" per un po 'di tempo. La mia ultima epifania è un po 'di una piccola mano (o di una casella DOS), sostituendo un'istanza di cmd.exe con un'altra. Questo viene eseguito eseguendo il command / programma tramite start cmd /k seguito immediatamente exit nel file .BAT . La scatola originale DOS scompare e la scatola DOS di sostituzione può essere interrotta pulitamente tramite CtrlC .

Si consideri il seguente esempio di traceroute che può essere interrotto da Ctrl + C o consentito di completare, restituendo l'utente al prompt C:\> :

 @Echo Off
 REM
 impostare timeout = 100
 se non "% 2" == "" set timeout =% 2
 REM
 avviare cmd / k tracert -w% timeout%% 1
 Uscita

La sostituzione dell'ambiente di un nuovo interpnetworking di command non può essere per tutti, ma a occhio nudo, guarda e funziona bene per me.

La soluzione di Gringo è buona, ma non funziona bene con gli script che passano lungo l'elenco di argomenti (cioè python myscript.py %* ), poiché SHIFT non aggiorna %* . Ci sono soluzioni alternative , ma hanno determinate limitazioni.

Ecco la modifica che ho finito con:

 IF [%JUSTTERMINATE%] == [OKAY] ( SET JUSTTERMINATE= python myscript.py %* ) ELSE ( SET JUSTTERMINATE=OKAY CALL %0 %* <NUL ) 

99. (9)% impeccabile.

Vedi questa domanda di overflow dello stack .

Tuttavia, patching cmd.exe non è qualcosa che farei per questo.

Nel mio caso era il file ping.bat che era nella mia directory utente (C: \ Users \ in Vista o C: \ Documents and Settings \ in XP) che deteneva indeterminatamente il lavoro batch.

Questo file batch è stato eseguito each volta che ho eseguito ping dal prompt dei comandi where la directory corrente è la mia directory utente. Ping-ing dalla window di esecuzione o da un'altra directory dell'utente funzionava correttamente.

Rimosso il file dal mio user dir e il problema è stato risolto!

Inizia le operazioni, ma ora la window aperta dal file batch viene modificata dalle opzioni che ho avuto e le "properties;" sono disabilitate (non risponderanno).

Alla fine del tuo script, basta aggiungere il seguente command:
echo
Questo non "danneggia" il comportmento dello script e sembra impedire al CDM di chiedere se si desidera terminare il batch.

Semplicemente redirect lo stdin batch a null aggiungendo <nul alla fine del command.

TCC / LE , che è una sostituzione gratuita di CMD (pensare a CMD ++), ha l'opzione di sopprimere il prompt di lavoro batch finale. È ansible trovare l'opzione nella window di dialogo Configurazione di avvio TCC :

Annulla il file batch in Ctrl-C : Annulla l'elaborazione di file batch senza il solito prompt quando si preme Control-C.

Immagine dello schermo:

Opzioni TCC / LE

Se non hai mai sentito parlare di TCC / LE prima, ecco qualche commento dal sito:

TCC / LE è un riassembly per la row di command CMD (il prompt dei comandi di Windows predefinito). TCC / LE è un superset di CMD, con 111 comandi interni (CMD ha less di 40), 240 variables interne e funzioni e centinaia di miglioramenti ai comandi CMD esistenti.

TCC / LE funziona con le applicazioni di row di command esistenti e con i file batch, ma offre grandi miglioramenti nelle funzionalità di row di command e file batch e aggiunge migliaia di nuove funzionalità alle windows dei prompt dei comandi.

Ho usato TCC / LE per anni e 4NT prima di esso. Ho molto amore per lei e posso raccomandarlo. Solo la ragione per cui non lo uso ancora è perché utilizzavo quasi esclusivamente PowerShell.