在批处理脚本中更改pause命令的输出

时间:2012-02-13 10:21:20

标签: windows batch-file cmd

我正在编写Windows批处理脚本。默认情况下,pause命令将暂停脚本并显示文本“按任意键继续...”

如何修改此文字以向用户显示我自己的文字?

感谢。 :)

9 个答案:

答案 0 :(得分:85)

您可以使用以下命令隐藏pause命令中的文本:

pause >nul

然后你可以回复你自己的消息,告诉用户它已暂停:

echo The batch file has paused

所以完整的脚本可能如下所示:

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

希望这会有所帮助:)

答案 1 :(得分:13)

这是一个单行

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

它稍短(少一点' nul') 比Aacini的解决方案:

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

并且,&#39;暂停&#39;首先,我认为 它的目的是什么更清楚。

同时

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

然而,与假设

一样,它们都不是那么好
  pause/t any key to exit ...

很难相信&#39;暂停&#39;幸存了下来 35年没有这种能力; - )

带有回声的解决方案&#39;有可能不受欢迎 尾随新线,
但确实提供了多行文字:

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

BV

答案 2 :(得分:7)

  

“不是我真正想要的,我想知道是否有办法实际更改Pause命令的输出文本,而不仅仅是解决方法。” - 哈希姆

是的,你可以!但是你必须知道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文件!我也是这么想。我刚刚发布了这个答案,所以OP意识到了他真正要求的......

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

答案 3 :(得分:5)

无法更改pause命令的文本。但是,您可能希望查看choice命令。您可以更改其打印的文本。唯一的缺点是你需要提供一个可接受的字符列表。

答案 4 :(得分:2)

这是另一个技巧

Pause. >nul | echo.  Press something to continue

答案 5 :(得分:1)

另一个解决方案就是这样的,

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

这样做的好处是光标与消息保持在同一行,就像使用PAUSE命令一样。

缺点是它只会侦听回车键。

答案 6 :(得分:1)

从Windows 2000(不是XP)开始,您可以使用choice命令,该命令远比pauseset /p强大。

除了可以指定自己的提示文本外,您还可以要求用户键入一个特定的键,并且仅键入该键,而不是仅限于并要求按下[Enter]

此外,您还可以提示用户按下多个不同的键,并根据所按下的键采取行动。

键入choice /?以获得帮助,或在此处阅读有关的更多信息:Wikipedia: choice (command)

答案 7 :(得分:1)

已经有很多解决方案。另一种有意义的变体:

echo Hit any key to continue...&pause>nul

答案 8 :(得分:0)

你可以这样做!

@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