MS-DOS批处理文件如何使用回车键暂停执行?

198

在MS-DOS批处理文件中,是否可以暂停脚本并等待用户按下回车键?

我希望在for循环内实现此操作。每次迭代后,我希望脚本暂停并等待用户按下“Enter”键。

7个回答

312

有一个 pause 命令可以实现暂停,尽管它不是专门用于回车键。

如果你真的想要等待只有回车键,你可以使用 set 命令通过虚拟变量请求用户输入,类似于:

set /p DUMMY=按回车键继续...


22
你无需指定变量名称:set /p=按回车继续...,或者如果你不需要提示,可以简单地使用 set /p= - dbenham
3
由于某种原因,我的应用程序正在完全忽略暂停逻辑。非常奇怪。 - ouflak
13
在这个上下文中使用“应用程序”这个词似乎有点奇怪(指批处理文件)。 - Adrian Grigore
它对我无效。只有在第二次启动时才有效,当“set”被解决 / 保存到环境中时才有效。 - ses

27

您可以使用pause命令来实现,例如:

dir
pause
echo Now about to end...
pause

2
“暂停”确实是“MS-DOS”的唯一有效答案(所有其他答案仅适用于“cmd”)。因此,您的答案实际上是这个特殊问题的唯一完全正确的答案(尽管它已经在7年前被建议过)。 - Stephan

16

pause命令是你要找的。 如果你只想要在按下enter键时暂停,你可以滥用runas命令:

runas /user:# "" >nul 2>&1
屏幕将会被冻结直到按下回车键。我比set/p=更喜欢的是,如果你按下回车键以外的其他按钮,它们不会被显示。

4
根据您所使用的操作系统,如果您可以灵活选择,则CHOICE可用于等待几乎任何键,EXCEPT是enter键。
如果您真正指的是微软坚持称之为“命令提示符”的东西,它只是一个MS-DOS仿真器,那么也许TIMEOUT适合您的目的(timeout /t -1等待任何键,而不仅仅是ENTER),当然,CHOICE在最近的WIN版本中再次可用。
关于SET /P的警告-虽然set /p DUMMY=Hit ENTER to continue...会起作用,
set "dummy="
set /p DUMMY=Hit ENTER to continue...
if defined dummy (echo not just ENTER was pressed) else (echo just ENTER was pressed)

该程序将检测用户输入的是单纯的回车键还是以回车键结尾的其他字符。


3

唯一有效的答案是使用 pause 命令。

尽管它不会特别等待'ENTER'键,但它会等待任何按键。

如果您希望对用户更方便,pause 是最佳选择。


0

npocmaka的回答让我意识到了runas /user:# "" >nul 2>&1,然而,我发现它可以通过一个未记录的参数别名来显著缩短。 2>&1似乎也是不必要的。这是你可以做到的最短(不包括提示文本):

echo|set/p="Press <ENTER> to continue.."&runas/u: "">NUL

使用语法高亮后并不容易阅读(stackoverflow.com仍未修复批处理文件的语法高亮),因此这里提供了带有语法高亮的屏幕截图:

Press  to continue..


0
在您的批处理文件中使用pause,不需要任何参数,就像这样:
@echo off
echo Hello
pause

在Windows资源管理器中双击运行此文件将显示:
Hello
Press any key to continue . . .

cmd运行代码的截图

按下任意键(除了修饰键)后,代码将继续执行,如果结束,窗口将消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接