Modifier la sortie de la commande pause dans le script batch

J'écris un script batch Windows. Par défaut, la commande pause interrompt le script et affiche le texte " Appuyez sur n'importe quelle touche pour continuer...".

Comment puis-je modifier ce texte à afficher mon propre texte pour l'utilisateur?

Merci. :)

23
demandé sur Hashim 2012-02-13 14:21:19

7 réponses

Vous pouvez masquer le texte de la commande pause en utilisant ceci:

pause >nul

Ensuite, vous pouvez faire écho à votre propre message pour dire à l'utilisateur qu'il a fait une pause:

echo The batch file has paused

Donc le script complet pourrait ressembler à ceci:

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

J'espère que cela aide :)

79
répondu Bali C 2012-02-13 10:25:30

Voici un one-liner

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

Il est légèrement plus court (un 'nul'de moins) que la solution D'Aacini:

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

Et, avec la "pause" d'abord, je pense que c'est un peu plus clair quelle est l'intention.

Avec les deux

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

Ne sont pas aussi bons, cependant, que l'hypothétique

  pause/t any key to exit ...

Il est difficile de croire que 'pause' a survécu 35 ans, sans cette capacité ;-)

Les solutions avec 'echo' ont le potentiel indésirable nouvelle ligne de fuite,
mais ne prévoir plusieurs lignes de texte:

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

Bv

11
répondu bob vance 2015-09-03 12:59:44

" Pas vraiment ce que je cherchais, je me demandais s'il y avait un moyen de changer réellement le texte de sortie de la commande Pause, pas seulement une solution de contournement."- Hashim

Oui, vous pouvez! Mais vous devez être conscient que PAUSE est une commande interne de CMD.Programme EXE, donc, pour modifier le message qui PAUSE spectacle, vous devez modifier CMD.EXE. Pour ce faire, vous devez utiliser un éditeur qui peut modifier les fichiers binaires. J'ai utilisé XVI32 Programme via ces étapes:

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.

Vous pouvez maintenant exécuter CMD.EXE pour obtenir le message de PAUSE modifié. J'ai fait un test de cette procédure:

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. .

Notes à tous ceux qui lisent cette réponse:

NOTE 1 : veuillez ne pas poster ce commentaire disant que la modification de CMD.Fichier EXE ne doit jamais être fait! Je pense la même chose. Je viens de poster cette réponse pour que le PO réalise ce qu'il a vraiment demandé...

NOTE 2 : l'examen de CMD.Fichier EXE avec un éditeur de texte, comme le Bloc-Notes, est très Intéressant. Vous pouvez voir toutes les commandes internes, les détails intéressants (comme les variables =ExitCode et = ExitCodeAscii), tous les messages d'erreur, etc. Par exemple, ce sont les commandes internes:

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                 & ( ) [ ] { } ^ = ; ! % ' + , ` ~               
7
répondu Aacini 2012-02-14 04:25:37

Il N'y a aucun moyen de changer le texte de la commande pause. Cependant, vous pouvez regarder la commande choice. Vous pouvez modifier le texte qu'il imprime. Le seul inconvénient est que vous devrez fournir une liste de caractères acceptables.

5
répondu Michael 2012-02-13 12:28:47

Autre sale solution serait quelque chose comme ceci,

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

L'avantage de ceci est que le curseur reste sur la même ligne que le message, tout comme avec l' PAUSE commande.

L'inconvénient est qu'il n'écoute que de la touche entrée.

1
répondu Trevi Awater 2015-07-11 14:03:20

Voici un autre truc

Pause. >nul | echo.  Press something to continue
1
répondu Panikosagros 2015-07-23 21:55:55

Vous pourriez le faire comme ça!

@echo off
echo Hello World!
echo:
echo Press 1 to continue
set /p letter=

if %letter% == 1 goto a ;or instead of goto you could write start and the file or website you want to start
pause >nul

:a
cls 
echo BYE NOW!
pause >nul
0
répondu Super461 2016-10-16 15:18:39