2012-02-13 29 views
22

Sto scrivendo uno script batch di Windows. Per impostazione predefinita, il comando pause interromperà lo script e visualizzerà il testo "Premere un tasto qualsiasi per continuare ...".Modifica output del comando di pausa nello script batch

Come posso modificare questo testo per visualizzare il mio testo per l'utente?

Grazie. :)

risposta

76

Si potrebbe nascondere il testo del comando pause utilizzando questo:

pause >nul

allora si potrebbe riecheggiare il proprio messaggio per informare l'utente che ha messo in pausa:

echo The batch file has paused

Quindi lo script completo potrebbe essere il seguente:

@echo off 
echo Hello World! 
echo The batch file has paused 
pause >nul 

Spero che questo aiuti :)

+0

Non proprio quello che stavo cercando, mi chiedevo se c'era un modo per modificare effettivamente il testo di output del comando Pause, non solo una soluzione alternativa. – Hashim

+1

No, AFAIK non c'è modo di cambiare quel testo. –

+0

KK, esattamente quello che ho paura di sentire. Grazie comunque del tuo aiuto, amico. :) – Hashim

5

Non è possibile modificare il testo del comando pause. Comunque potresti voler dare un'occhiata al comando choice. Puoi cambiare il testo che stampa. L'unico svantaggio è che è necessario fornire un elenco di caratteri accettabili.

+0

Hai appena controllato il comando 'choice', Michael. A) Non capisco davvero come mi aiuterebbe a realizzare ciò che voglio in questo caso, a meno che tu non stia suggerendo di usare 'choice' invece del comando' pause'? B) Non ha molta importanza in quanto eseguo Windows XP e il comando di scelta non è supportato a meno che non venga scaricato apparentemente un kit di risorse aggiuntive. Vedi qui: http://www.robvanderwoude.com/choice.php. Se avessi scaricato il kit di risorse extra per usarlo, dovrei fare lo stesso su tutti i computer su cui intendo utilizzare il mio script, no? – Hashim

7

"Non proprio quello che stavo cercando, mi chiedevo se esisteva un modo per modificare effettivamente il testo di output del comando Pause, non solo una soluzione alternativa." - Hashim

Sì, è possibile! Ma devi essere consapevole che PAUSE è un comando interno del programma CMD.EXE, quindi, per modificare il messaggio che mostra PAUSE, devi modificare il file CMD.EXE. Per fare ciò, è necessario utilizzare un editor che può modificare i file binari. Ho usato XVI32 programma tramite questi passaggi:

1- Copy CMD.EXE file to a new folder created for this purpose: COPY %COMSPEC% 
2- Edit the copy of CMD.EXE with XVI32.EXE program: 
    2.1- Locate the message you want. Messages are stored in 16-bits elements with the high byte equal zero. To locate a message: 
     2.1.1- In Search> Find> Text string> enter the message you want. 
     2.1.2- Convert Text -> Hex 
     2.1.3- Insert a zero after each letter-value 
     2.1.4- Press Ok 
    2.2- Modify the message for the new one. Modify existent letters only and keep zeros in place. Note that you can NOT extend any message. 
    2.3- End the edition and save the modified file. 

Ora è possibile eseguire CMD.EXE per ottenere il messaggio PAUSA modificato. Ho fatto un test di questa procedura:

C:\DOCUME~1\Antonio\MYDOCU~1\My Webs\XVI32 Hex File Editor 
>pause 
Press any key to continue . . . 

C:\DOCUME~1\Antonio\MYDOCU~1\My Webs\XVI32 Hex File Editor 
>cmd 
Microsoft Windows XP [Version 5.1.2600] 
(C) Copyright 1985-2001 Microsoft Corp. 

C:\DOCUME~1\Antonio\MYDOCU~1\My Webs\XVI32 Hex File Editor 
>pause 
Oprime una tecla para seguir. . 

Note per tutti che leggere questa risposta:

NOTA 1: Per favore, non inviare quel commento dicendo che la modifica di file CMD.EXE non deve mai essere fatto! Penso lo stesso. Ho appena postato questa risposta in modo che l'OP si rendesse conto di ciò che realmente chiedeva ...

NOTA 2: La revisione del file CMD.EXE con un editor di testo, come Blocco note, è molto interessante. Potresti visualizzare tutti i comandi interni, i dettagli interessanti (come = ExitCode e = ExitCodeAscii), tutti i messaggi di errore, ecc.Ad esempio, questi sono i comandi interni:

C O L O R T I T L E C H D I R C L S C M D E X T V E R S I O N 
D E F I N E D C O P Y  P A T H  P R O M P T  P U S H D P O P D 
A S S O C F T Y P E D A T E  D E L D I R E C H O  E N D L O C A L 
E R A S E E R R O R L E V E L  E X I T  E X I S T B R E A K F O R 
G O T O  I F   K E Y S  M K D I R M D  N O T P A U S E R D 
R E M  M O V E  R E N A M E  R E N R M D I R S E T S E T L O C A L 
S H I F T S T A R T T I M E  T Y P E  V E R I F Y V E R V O L = , ; +/[ ]  "  : . \ 


             P A T H E X T P A T H  P R O M P T 

                  F O R/? I F/?  R E M/? 



      % s    % s 
     % s 

     /A /P  : E O F   
     f d p n x s a t z D O 
/L /D /F /R   I N  E L S E  (% s) % s  % s % s % s 
    % c % c  % s % s     & () [ ] { }^= ; ! % ' + , ` ~    
+2

Sì, non ho intenzione di rischiare di modificare CMD.exe, lol. Speravo solo che sarebbe stato un parametro o qualcosa di 'PAUSE' che ha permesso di farlo. Inoltre, anche se sono riuscito a modificare correttamente il CMD.exe, dovrei comunque applicare la stessa modifica su tutte le macchine su cui intendo utilizzare il mio script, no? Quale sarebbe quasi impossibile e completamente impraticabile. Grazie comunque Aacini. – Hashim

+4

Non riesco ancora a capire perché non si desidera una soluzione equivalente, come questa: 'SET/P = Qualsiasi testo desiderato NUL'. – Aacini

1

Un'altra sporco soluzione sarebbe qualcosa di simile,

SET /P =Press enter to return to the menu . . . 
GOTO :menu 

Il vantaggio di questo è che il cursore rimane sulla stessa riga del messaggio , proprio come con il comando PAUSE.

Lo svantaggio è che ascolta solo il tasto Invio.

+1

ma sei limitato al tasto 'enter', mentre' pause' prende (quasi) ogni tasto. – Stephan

1

Ecco un altro trucco

Pause. >nul | echo. Press something to continue 
10

Ecco una battuta

pause>nul|set/p =any key to exit ... 

E 'leggermente più corto (uno in meno 'nul') rispetto alla soluzione di Aacini:

set/p<nul =any key to exit ...&pause>nul 

e , con la 'pausa' prima, penso che sia poco più chiaro qual è l'intento.

Con entrambi

cursor stays on the same line 
    ANY key works, not just 'enter' 

Né sono buone, tuttavia, come l'ipotetico

pause/t any key to exit ... 

E 'difficile credere che 'pausa' è sopravvissuto di 35 anni senza questa capacità ;-)

Le soluzioni con "echo" presentano la indesiderabile trailing new-line,
ma prevedere più righe di testo:

Pause>nul|(echo All your bases &echo are belong to us &echo Press any key to die...) 

bv

+1

In realtà, mi sono appena reso conto che puoi fare più cose e che AND non ha una nuova riga finale: Pausa> nul | (echo Tutte le basi e l'eco ci appartengono e set/p = Premi qualsiasi tasto per morire ...) –

0

Si potrebbe fare in questo modo!

Problemi correlati