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

joe*_*joe 480 windows command-line batch-file

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

Dav*_*man 608

在Windows/DOS批处理文件中:

pause
Run Code Online (Sandbox Code Playgroud)

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

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

pause >nul
Run Code Online (Sandbox Code Playgroud)

  • 双击bat文件时,这里没有任何建议适合我.这是一个服务器环境(我必须在其中运行脚本),因此他们可以修改行为.这不会改变我的目标.要保持命令窗口打开,我可以输入它键入的错误消息. (12认同)
  • 是的,这并不总是有效,具体取决于环境。对于更强大的解决方案,请参阅下面我的答案。本质上只需执行 set /p exitkey= "按任意键继续..." (2认同)

Rut*_*ing 135

取决于确切的问题!

通常pause.bat文件中执行该作业.

如果您希望cmd.exe不能关闭以便能够保持键入,请使用cmd /k文件末尾的命令.

  • 如果您通过"运行"对话框运行Windows命令,请在命令之前输入"cmd/k".`&cmd/k`不起作用. (2认同)

Val*_*one 65

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

只是觉得有必要澄清一下/k(来自windows网站):

/k :执行string指定的命令并继续.

因此cmd /k,在bat文件结束时没有跟进命令只会保持cmd.exe窗口打开以供进一步使用.

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


小智 23

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

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
Run Code Online (Sandbox Code Playgroud)

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

And*_*ung 16

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

这样会关闭控制台

ECHO This is the wrong exemple
mvn clean install
pause
Run Code Online (Sandbox Code Playgroud)

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

ECHO This is the right exemple
CALL mvn clean install
pause
Run Code Online (Sandbox Code Playgroud)

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

  • 多谢!如果命令失败,它会阻止提示符关闭。 (2认同)
  • 这对我有用。我想在 1 个 bat 文件中执行 2 个不同的命令。但我的提示在第一个命令后关闭。输入 `call <myCommand>` 解决了这个问题:我的提示在第一次执行后停止关闭 (2认同)
  • @Priyam,因为出于某种原因,在调用另一个批处理文件(本例中为 mvn)时 cmd 的默认行为基本上是用它替换当前进程,这与调用 .exe 不同 (2认同)

lyf*_*ing 11

cmd.exe在要执行的代码下面添加一个新行:

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

cmd.exe
Run Code Online (Sandbox Code Playgroud)


小智 9

我的方法是写一个实际的批次(说"foo.bat")来完成这项工作; 然后创建另一个"start.bat":

@echo off
cmd /k foo.bat
Run Code Online (Sandbox Code Playgroud)

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

  • 你可以把 `cmd /k`(没有任何命令)放在 `foo.bat` 文件的末尾并运行它。您不需要单独的“start.bat”文件。 (2认同)

小智 8

cmd在批处理文件的末尾调用.


npo*_*aka 5

除了 pause

set /p=
Run Code Online (Sandbox Code Playgroud)

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

要么

runas /user:# "" >nul 2>&1
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*ord 5

这个小技巧要求用户输入一个密钥并将其存储到变量 %exitkey% 中(不过这个变量可以被称为任何你喜欢的名字)。

set /p exitkey= "Press any key to continue..."
Run Code Online (Sandbox Code Playgroud)

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


lam*_*345 5

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

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
Run Code Online (Sandbox Code Playgroud)