web-dev-qa-db-fra.com

Modifier le résultat de la commande pause dans le script de traitement par lots

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

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

Merci. :) 

24
Hashim

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

pause >nul

Vous pouvez ensuite faire écho à votre propre message pour indiquer à l'utilisateur qu'il s'est arrêté:

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 t'aides :)

82
Bali C

Voici un one-liner

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

C'est un peu plus court (un moins 'nul') Que la solution d'Aacini:

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

et, avec la «pause» en premier, je pense que l'intention est un peu plus claire.

Avec les deux

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

Ni sont aussi bons, cependant, que l'hypothèse

  pause/t any key to exit ...

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

Les solutions avec 'echo' ont la potentiellement indésirable Traînant new-line,
mais prévoient plusieurs lignes de texte:

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

bv

11
bob vance

"Ce n'est pas vraiment ce que je cherchais, je me demandais s'il existait un moyen de changer le texte de sortie de la commande Pause, et pas seulement une solution de contournement." - Hashim 

Oui, vous pouvez! Mais vous devez savoir que PAUSE est une commande interne du programme CMD.EXE. Pour modifier le message que PAUSE show, vous devez modifier le fichier CMD.EXE. Pour ce faire, vous devez utiliser un éditeur capable de 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 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: S'il vous plaît, ne postez pas ce commentaire en disant que la modification du fichier CMD.EXE ne doit JAMAIS être effectuée! Je pense la même chose. Je viens de poster cette réponse afin que l'OP réalise ce qu'il a vraiment demandé ...

NOTE 2: L'examen du fichier CMD.EXE avec un éditeur de texte, tel que le Bloc-notes, est très intéressant. Vous pouvez voir toutes les commandes internes, des détails intéressants (comme les variables = ExitCode et = ExitCodeAscii), tous les messages d'erreur, etc. Par exemple, voici 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
Aacini

Il n'y a aucun moyen de changer le texte de la commande pause. Cependant, vous voudrez peut-être consulter la commande choice. Vous pouvez changer le texte imprimé. Le seul inconvénient est que vous devez fournir une liste de caractères acceptables.

5
Michael

Une autre solution dirty serait quelque chose comme ça,

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, comme avec la commande PAUSE.

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

1
Trevi Awater

Voici une autre astuce 

Pause. >nul | echo.  Press something to continue
1
Panikosagros

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
Super461