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

Has*_*him 32 windows cmd batch-file

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

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

谢谢.:)

Bal*_*i C 92

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

pause >nul

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

echo The batch file has paused

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

@echo off
echo Hello World!
echo The batch file has paused
pause >nul
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)

  • 感谢LRMAAX的输入.让我觉得有点逗乐我以前的迂腐为"适当"的解决方案.几年的代码经验和我的标准已经下降,我将接受一个"hacky"方法慷慨.不过,很高兴知道这是普遍接受的做事方式. (6认同)
  • 实际上,我认为这是预期的做法.由于PAUSE命令不接受参数,因此您可以抑制其输出,在PAUSE之前回显您的消息.我已经看过很多次使用这种技术的批处理文件了. (4认同)
  • 不,据我所知,无法更改该文本。 (2认同)

bob*_*nce 16

这是一个单行

  pause>nul|set/p =any key to exit ...
Run Code Online (Sandbox Code Playgroud)

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

  set/p<nul =any key to exit ...&pause>nul
Run Code Online (Sandbox Code Playgroud)

并且,首先,"暂停",我认为意图是更清楚的.

  cursor stays on the same line  
  ANY key works, not just 'enter'  
Run Code Online (Sandbox Code Playgroud)

然而,两者都不如假设那么好

  pause/t any key to exit ...
Run Code Online (Sandbox Code Playgroud)

没有这种能力,很难相信'暂停'已经存活了35年;-)

带有'echo'的解决方案可能有不受欢迎的尾随换行符,
但确实提供了多行文本:

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

BV

  • 实际上,我只是意识到您可以执行多个操作并且没有尾随换行符:Pause&gt; nul | (回显您所有的基准和回显都属于我们&set / p =按任意键即可死亡...) (2认同)

Aac*_*ini 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.
Run Code Online (Sandbox Code Playgroud)

您现在可以运行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. .
Run Code Online (Sandbox Code Playgroud)

读到这个答案的每个人的注意事项:

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

  • 我仍然不明白为什么你不想要一个等效的解决方案,比如这个:`SET/P =你想要的任何文本<NUL`后面跟着'PAUSE> NUL`. (4认同)
  • 是的,我甚至不打算冒险编辑CMD.exe,哈哈.我只是希望它是一个参数或"暂停"的东西,允许这样做.此外,即使我设法成功修改CMD.exe,我仍然必须在我打算使用我的脚本的所有机器上应用相同的修改,不是吗?这几乎是不可能的,完全不切实际.无论如何,谢谢Aacini. (3认同)

Mic*_*ael 5

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