是否有可能在 MS-DOS 批处理文件暂停脚本,等待用户点击输入键?
我希望在 for 循环中执行此操作。在每次迭代之后,我希望脚本暂停并等待用户点击“ Enter”
pause命令就是你要找的。 如果你只看输入时的情况,你可以滥用 runas命令:
pause
runas
runas /user:# "" >nul 2>&1
屏幕将被冻结,直到输入为止。比起 set/p=,我更喜欢的是,如果你按下其他按钮而不是输入,它们将不会显示出来。
set/p=
有一个 pause命令可以做到这一点,尽管它不是专门的输入键。
如果您确实希望只等待输入键,可以使用 set命令通过一个虚拟变量请求用户输入,比如:
set
set /p DUMMY=Hit ENTER to continue...
根据您使用的操作系统,如果您是灵活的,那么 CHOICE可以用来等待几乎任何键 EXCEPT输入
CHOICE
EXCEPT
如果你真的指的是微软坚持称之为“命令提示符”的简单的 MS-DOS 模拟器,那么也许 TIMEOUT可以满足你的需要(timeout /t -1等待任何键,而不仅仅是 ENTER) ,当然 CHOICE在最近的 WIN 版本中也可用。
TIMEOUT
timeout /t -1
ENTER
还有 SET /P上的警告 set /p DUMMY=Hit ENTER to continue...会起作用,
SET /P
set "dummy=" set /p DUMMY=Hit ENTER to continue... if defined dummy (echo not just ENTER was pressed) else (echo just ENTER was pressed)
将检测是否只输入或其他内容,以 ENTER 结尾的键入。
你可以使用 pause命令,例如:
dir pause echo Now about to end... pause
唯一有效的答案是 pause命令。
虽然这不会专门等待“ ENTER”键,但它会等待按下的任何键。
为了方便用户,pause是最好的选择。
Npomaka 的回答 让我意识到了 runas /user:# "" >nul 2>&1-然而,我发现它可以被显著地缩短,这多亏了一个未记录的参数别名。2>&1也似乎是不必要的。这是您能做到的最短的内容(不包括提示文本) :
2>&1
echo|set/p="Press <ENTER> to continue.."&runas/u: "">NUL
这个语法突显的可读性不是很好( stackoverflow.com 还没有修复他们的批处理文件语法突显) ,所以这里有一个语法突显的截图: