【问题标题】:Change output of pause command in batch script在批处理脚本中更改暂停命令的输出
【发布时间】:2012-02-13 10:21:19
【问题描述】:

我正在编写一个 Windows 批处理脚本。默认情况下,pause 命令会暂停脚本并显示文本“Press any key to continue...”

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

【问题讨论】:

  • 这能回答你的问题吗? Changing Pause Message
  • @Codemaker 在我问这个问题一年后,你的假设副本被问到了。如果有任何问题与此问题重复。

标签: windows batch-file cmd


【解决方案1】:

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

pause >nul

然后您可以回显您自己的消息以告诉用户它已暂停:

echo The batch file has paused

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

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

希望这会有所帮助:)

【讨论】:

  • 不是我真正想要的,我想知道是否有一种方法可以实际更改 Pause 命令的输出文本,而不仅仅是一种解决方法。
  • 不,AFAIK 无法更改该文本。
  • 其实,我认为这是预期的做法。由于 PAUSE 命令不接受参数,因此您禁止其输出,在 PAUSE 之前回显您的消息。我见过很多次使用这种技术的批处理文件。
  • 感谢您的输入,LRMAAX。现在的我对过去我对“适当”解决方案的迂腐感到有点好笑。几年后的代码经验和我的标准已经下降,我会优雅地接受一种“hacky”方法。不过,很高兴知道这是公认的做事方式。
  • @Hashim:我也是一名业余编码员,所以别担心。我完全同意你的看法,但有一点需要注意:完美主义只会在花费时间方面适得其反,在这种情况下,就是编码。就效率而言,它是最有生产力的。我想这取决于您希望实现的目标。对我来说,这不是为了崇拜“正确”本身,而是为了让事情变得最好。当然,最后,这些都不重要,因为所有软件迟早都会被更新(但不一定更好)的软件取代:)
【解决方案2】:

这是一个单行

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

bv

【讨论】:

  • 实际上,我刚刚意识到你可以做多个并且没有尾随换行:Pause>nul | (echo 你所有的基地 & echo 都属于我们 & set/p =Press any key to die...)
【解决方案3】:

“不是我真正想要的,我想知道是否有一种方法可以实际更改暂停命令的输出文本,而不仅仅是一种解决方法。” ——哈希姆

是的,你可以!但是你必须知道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 来获取修改后的暂停消息。我对这个程序做了一个测试:

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

【讨论】:

  • 是的,我什至不会冒险编辑 CMD.exe,哈哈。我只是希望它是一个参数或PAUSE 允许这样做的东西。此外,即使我确实成功地修改了 CMD.exe,我仍然必须在我打算使用我的脚本的所有机器上应用相同的修改,不是吗?这几乎是不可能的,也是完全不切实际的。无论如何,谢谢 Aacini。
  • 我仍然不明白你为什么不想要一个等效的解决方案,比如这个:SET /P =Any text you want &lt; NUL,然后是PAUSE &gt; NUL
【解决方案4】:

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

【讨论】:

  • 刚刚检查了choice 命令,迈克尔。 A) 我不太明白在这种情况下它将如何帮助我完成我想要做的事情,除非你建议我使用choice 而不是pause 命令? B) 无论如何,这并不重要,因为我运行的是 Windows XP,并且它不支持选择命令,除非我显然下载了额外的资源工具包。见这里:robvanderwoude.com/choice.php。如果我确实下载了额外的资源工具包来使用它,我将不得不在我打算使用我的脚本的所有计算机上做同样的事情,不是吗?
【解决方案5】:

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

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

【讨论】:

    【解决方案6】:

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

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

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

    缺点是它只听回车键。

    【讨论】:

    • 但您仅限于使用 enter 键,而 pause 使用(几乎)每个键。
    【解决方案7】:

    这是另一个技巧

    Pause. >nul | echo.  Press something to continue
    

    【讨论】:

      【解决方案8】:

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

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

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

      输入 choice /? 寻求帮助,或在此处阅读更多信息:Wikipedia: choice (command)

      【讨论】:

        【解决方案9】:

        你可以这样做!

        @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
        

        【讨论】:

          【解决方案10】:
          pause|echo text you want displayed
          

          【讨论】:

            【解决方案11】:

            因为我没有看到它建议并且互联网上的每只狗都尝试过,但我除外。

            按照 OP 的要求,这在 XP 下可能无法正常工作,但对任何较新的系统都有效,例如我当前的 Win7 :-)

            脏版(无消息)|keys ON 什么都不做,但阻止按任意键...

            timeout -1|Keys ON
            

            可用于消息后 @timeout -1|Keys ON&amp;echo I'm back

            这将暂停并显示响应,直到被接受然后返回提示/下一个 cmd 行

            @timeout -1|Echo Hello Padawan %userprofile:~9%, Press a key, you can! 
            :on any keys
            @echo Welcome to the dark side
            

            【讨论】:

              猜你喜欢
              • 2018-11-07
              • 2022-07-21
              • 2021-10-04
              • 1970-01-01
              • 2015-10-11
              • 1970-01-01
              • 2013-06-11
              • 2011-03-19
              • 1970-01-01
              相关资源
              最近更新 更多