it-swarm.com.ru

Изменить вывод команды pause в пакетном скрипте

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

Как я могу изменить этот текст, чтобы отобразить мой собственный текст для пользователя?  

Благодарю. :) 

24
Hashim

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

pause >nul

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

echo The batch file has paused

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

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

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

82
Bali C

Вот один вкладыш

  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 лет без этой способности ;-)

Решения с 'echo' могут быть нежелательными
, но предусматривают несколько строк текста:

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

б.в.

11
bob vance

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

Да, ты можешь! Но вы должны знать, что 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. .

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

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

NOTE 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                 & ( ) [ ] { } ^ = ; ! % ' + , ` ~               
7
Aacini

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

5
Michael

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

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

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

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

1
Trevi Awater

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

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

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

@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