如何防止执行批处理文件后自动关闭控制台

Posted

技术标签:

【中文标题】如何防止执行批处理文件后自动关闭控制台【英文标题】:How to prevent auto-closing of console after the execution of batch file 【发布时间】:2010-11-02 13:41:03 【问题描述】:

我可以在批处理文件的末尾放置什么命令来防止在执行文件后自动关闭控制台?

【问题讨论】:

如果有一种方法可以检测 .cmd 文件是否通过在资源管理器中双击启动(然后您希望它在最后暂停)或者它是否由已经启动的打开命令行。在后一种情况下(特别是如果由另一个程序执行),您不希望暂停。对于这种情况,我还没有找到一个好的解决方案(通常使用 if %NOPAUSE% 变量,但这仅适用于父程序,不适用于 paremt shell)。 有办法:***.com/questions/3551888/… 【参考方案1】:

在 Windows/DOS 批处理文件中:

pause

这会打印出很好的"Press any key to continue . . . " 消息

或者,如果您不想要 "Press any key to continue . . ." 消息,请改为:

pause >nul

【讨论】:

双击 bat 文件时,这里的建议都不适合我。这是一个服务器环境(我必须在其中运行脚本),所以他们可以修改行为。那不会改变我的目标。保持命令窗口打开,这样我就可以输入它的错误消息。 是的,这并不总是有效,具体取决于环境。有关更强大的解决方案,请参阅下面的答案。基本上只是做 set /p exitkey= "Press any key to continue..." 小心,如果有人在没有控制台窗口的情况下运行您的脚本(例如通过 vbscript),那么它会挂起,直到您通过任务管理器将其杀死。 如果它像 maven 使用 CALL,***.com/a/52205298/4485678【参考方案2】:

取决于确切的问题!

通常pause.bat 文件中完成这项工作。

如果您不希望 cmd.exe 关闭以继续输入,请在文件末尾使用cmd /k 命令。

【讨论】:

如果您通过“运行”对话框运行 Windows 命令,请将cmd /k 放在命令之前。 & cmd /k 不起作用。【参考方案3】:

在批处理文件末尾调用cmd

【讨论】:

【参考方案4】:

在要执行的代码下方添加cmd.exe 作为新行:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe

【讨论】:

这正是我想要的,谢谢!当您的 python 脚本崩溃时,“暂停”将不起作用。我想要的是看到一条错误消息。到目前为止,我必须通过控制台运行我的 python 脚本 但这工作正常:python script.py %1 && cmd 谢谢!这有帮助!我正在创建一个批处理文件来运行 python 应用程序。【参考方案5】:

如果您希望 cmd.exe 不关闭,并且能够继续输入,请使用 cmd /k

只是觉得有必要澄清 /k 的作用(来自 windows 网站):

/k:执行字符串指定的命令并继续。

所以cmd /k 在 bat 文件末尾没有后续命令只会保持cmd.exe 窗口打开以供进一步使用。

另一方面,批处理文件末尾的pause 将简单地暂停进程并在第一次按下按钮时终止cmd.exe

【讨论】:

【参考方案6】:

除了pause

set /p=

可以使用。它会期待用户输入并在按下输入时释放流程。

runas /user:# "" >nul 2>&1

除了用户输入中的任何内容都不会显示,也不会保留在命令历史记录中之外,它将执行相同的操作。

【讨论】:

【参考方案7】:

以下在批处理文件中使用命令的方式将打开新的命令提示符窗口,并且新窗口不会自动退出。

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

【讨论】:

在我的情况下,我在运行终端命令时出现了一些错误,因此,'pause' 和 'cmd /k' 命令并没有帮助我停止程序,因为错误。这个例子帮助我展示,我有错误,也从终端停下来。谢谢!【参考方案8】:

可能性 1: 只需制作 2 个 .bat 文件并写入第一个:

start <filename> // name of 2nd batch file
exit

批处理文件 2 是最后不会关闭的文件。 因此,现在当您打开批处理 nr.1 时,它将启动第二个并自行关闭。 当第二个完成时,它不会完全关闭(只要你不把出口放在最后)

可能性 2: 批处理文件1:

call <filename>
cls
echo End of file
pause
<any code you want>

当第二个文件结束时,它将再次进入文件 1 并输出其余部分。有了它,您甚至可以制作错误处理程序。如果 nr.1 崩溃,它会进入 nr.2 并显示它

【讨论】:

【参考方案9】:

我的方法是编写一个实际的批处理(例如“foo.bat”)来完成这项工作;然后创建另一个“start.bat”:

@echo off
cmd /k foo.bat

我发现这在我设置一次性环境变量时非常有用。

【讨论】:

您可以将cmd /k(无需任何命令)放在foo.bat 文件的末尾并运行它。您不需要单独的 start.bat 文件。【参考方案10】:

我知道我迟到了,但我喜欢的方式是:

:programend
pause>nul
GOTO programend

这样用户不能使用回车退出。

【讨论】:

我认为是的,因为它是一种防止控制台关闭的增强方法。即使用户按下一个键,控制台仍保持打开状态。用户只能通过关闭控制台窗口来强制退出。【参考方案11】:

根据用例有两种方法

1) 如果您希望 Windows cmd 提示保持打开,以便您可以看到执行结果并在之后关闭它;使用

pause

2) 如果您希望 Windows cmd 提示符保持打开状态并允许您执行一些命令后缀;使用

cmd

【讨论】:

【参考方案12】:

很简单,将 cmd 添加到你的最后一行 bat,但是!如果您重置或清除系统路径,则必须使用完整路径启动 cmd,例如:

%windir%\system32\cmd.exe

例如,我有一个将 jdk 重置为旧版本的 bat 文件,如下所示:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

由于我重置了系统路径,所以必须用全路径运行cmd,否则系统找不到cmd.exe,会运行cmd失败,直接关闭窗口,看不到错误信息。

【讨论】:

【参考方案13】:

这个小技巧要求用户输入一个密钥并将其存储到变量 %exitkey% 中(不过,这个变量可以任意命名)。

set /p exitkey= "Press any key to continue..."

注意:'=' 后面的空格很重要

【讨论】:

【参考方案14】:
pause

echo text to display
pause>nul

【讨论】:

【参考方案15】:

如果您正在使用 Maven 并且您想跳过输入并阻止控制台关闭以查看结果,您需要在脚本中使用 CALL 命令,除了 'mvn全新安装”。

这样会关闭控制台

ECHO This is the wrong exemple
mvn clean install
pause

这样控制台将保持打开状态

ECHO This is the right exemple
CALL mvn clean install
pause

如果你不使用CALL 命令,过去的例子都不起作用。因为由于某种原因,调用另一个批处理文件(在本例中为 mvn)时 cmd 的默认行为本质上是用它替换当前进程,这与调用 .exe 不同

【讨论】:

非常感谢!如果命令失败,它会阻止提示关闭。 它对我有用。我想在 1 个 bat 文件中执行 2 个不同的命令。但我的提示在第一个命令后关闭。把call &lt;myCommand&gt; 解决了这个问题:我的提示在第一次执行后停止关闭 但是为什么没有 CALL @andrey 就关闭了 我不记得了 xD 但我确定有一个解释,我只是不记得而且我在谷歌上找不到它:/ @Priyam @Priyam 因为由于某种原因,调用另一个批处理文件(在这种情况下是 mvn)时 cmd 的默认行为本质上是用它替换当前进程,这与调用 .exe 不同【参考方案16】:

这里的答案有问题,所以我想出了这个,这对我有用(TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause

【讨论】:

【参考方案17】:

cmd /k cd C:\Projects.....

如果你想在特定的长位置打开你的 cmd

【讨论】:

以上是关于如何防止执行批处理文件后自动关闭控制台的主要内容,如果未能解决你的问题,请参考以下文章

windows下批处理实现进程监测,防止进程自动关闭

Windows 批处理文件

如何让批处理命令后运行后自动关闭

运行批处理文件后如何关闭命令行窗口?

当从控制器启动的作业失败时,如何防止弹簧批处理关闭应用程序?

dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?