Изменить вывод команды pause в пакетном скрипте - PullRequest
27 голосов
/ 13 февраля 2012

Я пишу пакетный скрипт Windows. По умолчанию команда pause приостанавливает выполнение сценария и отображает текст «Нажмите любую клавишу, чтобы продолжить ...» .

Как мне изменить этот текст для отображения моего собственного текста пользователю?

Спасибо. :)

Ответы [ 7 ]

85 голосов
/ 13 февраля 2012

Вы можете скрыть текст из команды pause, используя это:

pause >nul

Тогда вы можете повторить свое собственное сообщение, чтобы сообщить пользователю, что оно приостановилось:

echo The batch file has paused

Таким образом, полный скрипт может выглядеть так:

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

Надеюсь, это поможет:)

15 голосов
/ 03 сентября 2015

Вот одна строчка

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

Это немного короче (на один меньше 'nul'), чем решение Aacini:

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

и, с первой паузой, яПодумайте, что это немного яснее, каково намерение.

С обоими

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

Однако они не так хороши, как гипотетические

  pause/t any key to exit ...

полагайте, что «пауза» пережила 35 лет без этой способности; -)

Решения с «эхо» содержат, возможно, нежелательный завершающий символ новой строки,
, но предусматривают несколько строк текста:

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

бв

7 голосов
/ 14 февраля 2012

"Не совсем то, что я искал, мне было интересно, есть ли способ действительно изменить текст вывода команды Пауза, а не просто обойти это".- Хашим

Да, вы можете!Но вы должны знать, что PAUSE является внутренней командой программы CMD.EXE, поэтому, чтобы изменить сообщение, которое показывает PAUSE, вы должны изменить файл CMD.EXE.Для этого вы должны использовать редактор, который может изменять двоичные файлы.Я использовал программу XVI32 , выполнив следующие действия:

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.

Теперь вы можете запустить CMD.EXE, чтобы получить измененное сообщение PAUSE.Я проверил эту процедуру:

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

Примечания для всех, кто читает этот ответ:

ПРИМЕЧАНИЕ 1 : Пожалуйста, не публикуйте этот комментарий о том, чтоизменение файла CMD.EXE никогда не должно быть сделано!Я думаю так же.Я только что опубликовал этот ответ, чтобы ОП понял, что он действительно просил ...

ПРИМЕЧАНИЕ 2 : просмотр файла CMD.EXE с помощью текстового редактора, такого как Блокнот, очень интересен,Вы можете увидеть все внутренние команды, интересные детали (например, переменные = ExitCode и = ExitCodeAscii), все сообщения об ошибках и т. Д. Например, это внутренние команды:

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                 & ( ) [ ] { } ^ = ; ! % ' + , ` ~               
5 голосов
/ 13 февраля 2012

Нет способа изменить текст команды pause.Однако вы можете посмотреть на команду choice.Вы можете изменить текст, который он печатает.Единственным недостатком является то, что вам нужно предоставить список допустимых символов.

2 голосов
/ 24 июля 2015

Вот еще один трюк

Pause. >nul | echo.  Press something to continue
1 голос
/ 11 июля 2015

Другое грязное решение будет примерно таким,

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

Преимущество этого состоит в том, что курсор остается на той же строке, что и сообщение, так же, как с помощью команды PAUSE.

Недостатком является то, что он слушает только клавишу ввода.

0 голосов
/ 16 октября 2016

Вы можете сделать это так!

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...