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


509

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


5
如果有一种方法可以检测是否通过双击资源管理器中的.cmd文件启动了(然后您希望它在末尾暂停),或者是通过一个已经打开的命令行启动了。在后一种情况下(尤其是如果由其他程序执行),您不希望暂停。我还没有找到适合这种情况的解决方案(通常使用if%NOPAUSE%变量,但这仅适用于父程序而不适用于paremt shell)。
eckes 2012年

Answers:


634

在Windows / DOS批处理文件中:

pause

这会打印一条好"Press any key to continue . . . "消息

或者,如果您不希望收到此"Press any key to continue . . ."消息,请执行以下操作:

pause >nul

14
双击bat文件时,这里没有建议对我有用。这是一个服务器环境(我必须在其中运行脚本),因此他们可以修改行为。那不会改变我的目标。为了使命令窗口保持打开状态,以便我键入错误消息。
Henrik Erlandsson

1
是的,根据环境的不同,这并不总是可行的。有关更强大的解决方案,请参见下面的答案。本质上来说,只需设置/ p exitkey =“按任意键继续...”
史蒂芬·马克·福特

请注意,如果有人在没有控制台窗口的情况下运行您的脚本(例如通过vbscript),则该脚本将挂起,直到您通过任务管理器将其杀死为止。
安德里(Andry)

如果像maven这样的人使用CALL,stackoverflow.com / a / 52205298/4485678
Kevin Roy

暂停在这里完美工作
Davidson Lima

141

取决于确切的问题!

通常pause,该工作在.bat文件中进行。

如果不希望cmd.exe关闭以保持键入状态,请cmd /k在文件末尾使用command。


2
如果您通过“运行”对话框运行Windows命令,请放在cmd /k命令之前。& cmd /k将无法正常工作。
本体

68

如果要关闭cmd.exe并能够继续键入,请使用 cmd /k

只是觉得有必要澄清一下/k(从Windows网站):

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

因此cmd /k,在bat文件末尾没有后续命令的情况下,只需保持cmd.exe窗口打开以备将来使用。

另一方面pause,在批处理文件的末尾,只需暂停过程并cmd.exe在第一次按下按钮时终止


24

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

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

2
就我而言,在运行终端命令期间出现了一些错误,因此,“ pause”和“ cmd / k”命令并没有帮助我停止程序,原因是该错误。这个例子帮助我展示了我的错误,并且也从终端停下来了。谢谢!
HowDoYouTellForAChild

19

如果您使用的是Maven,并且希望跳过输入并阻止控制台关闭以查看结果CALL,则除了“ mvn clean install”外,还需要使用脚本中的命令。

这样会关闭控制台

ECHO This is the wrong exemple
mvn clean install
pause

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

ECHO This is the right exemple
CALL mvn clean install
pause

如果您不使用该CALL命令,则过去的示例都不会起作用。


1
非常感谢!如果命令失败,它可以防止提示关闭。
Timur Gilauri

1
它为我工作。我想在1个bat文件中执行2个differents命令。但是我的提示在第一个命令后关闭。推杆call <myCommand>解决了此问题:第一次执行后,我的提示
停止

1
最有用的答案
gianmarcocalbi

14

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

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

cmd.exe

这正是我在寻找的东西,谢谢!当您的python脚本崩溃时,“暂停”将不起作用。我想要的是看到错误消息。到目前为止,我必须通过控制台运行python脚本
user70960

但这工作正常:python script.py %1 && cmd
user70960

谢谢!这有帮助!我正在创建一个批处理文件来运行python应用程序。
fez.tival

10

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

@echo off
cmd /k foo.bat

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


1
您可以将cmd /k(不带任何命令)放在foo.bat文件末尾并运行它。您不需要单独的start.bat文件。
ADTC


5

除了 pause

set /p=

可以使用。它将期望用户输入,并在按Enter时释放流。

要么

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

它将执行相同的操作,只是不会显示用户输入的内容,也不会保留在命令历史记录中。


3

可能性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并显示


2

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

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

注意:“ =”后的空格非常重要



2

我知道我来晚了,但是我的首选方式是:

:programend
pause>nul
GOTO programend

这样,用户无法使用enter退出。


我认为是的,因为这是防止控制台关闭的增强方法。即使用户按下一个键,控制台仍保持打开状态。仅通过关闭控制台窗口将迫使用户退出。
decadenza '18

2

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

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

1

取决于用例有两种方法

1)如果您希望Windows cmd提示符保持打开状态,以便您可以看到执行结果并随后将其关闭;采用

pause

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

cmd

在此处输入图片说明


1

轻松,将cmd添加到蝙蝠的最后一行,但是!如果重置或清除系统路径,则必须使用完整路径启动cmd,例如:

%windir%\system32\cmd.exe

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

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,仅关闭窗口,就看不到错误msg 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.