ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

R
Rob Kielty

在 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,stackoverflow.com/a/52205298/4485678
对我来说效果很好:D
l
lakshman

取决于确切的问题!

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

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


如果您通过“运行”对话框运行 Windows 命令,请将 cmd /k 放在您的命令之前。 & cmd /k 不起作用。
V
Valentine Stone

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

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

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

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

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


A
Andrey Hartung

如果您使用 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 命令,则过去的示例都不起作用。因为由于某种原因,调用另一个批处理文件(在这种情况下是 mvn)时 cmd 的默认行为本质上是用它替换当前进程,这与调用 .exe 不同


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

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

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

在我的情况下,我在运行终端命令期间遇到了一些错误,因此,“暂停”和“cmd / k”命令并没有帮助我停止程序,因为错误。这个例子帮助我展示,我有错误,也从终端停下来。谢谢!
R
ROMANIA_engineer

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

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

cmd.exe

这正是我想要的,谢谢!当您的 python 脚本崩溃时,“暂停”将不起作用。我想要的是看到一条错误消息。直到现在我不得不通过控制台运行我的 python 脚本
但这很好用:python script.py %1 && cmd
谢谢!这有帮助!我正在创建一个批处理文件来运行 python 应用程序。
E
Erich Chen

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

@echo off
cmd /k foo.bat

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


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

在批处理文件末尾调用 cmd


k
kungfooman

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

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

n
npocmaka

除了 pause

set /p=

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

或者

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

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


S
Steven Mark Ford

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

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

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


d
decadenza

我知道我迟到了,但我首选的方式是:

:programend
pause>nul
GOTO programend

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


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

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


H
Hitesh Sahu

有两种方法可以做到这一点取决于用例

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

暂停

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

命令

https://i.stack.imgur.com/vwetW.png


Z
Zenedus
pause

或者

echo text to display
pause>nul

W
Wei Kleeff

简单,将 cmd 添加到你的最后一行 bat,但是!如果您重置或清除系统路径,则必须使用完整路径启动 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失败,直接关闭窗口,看不到错误信息.


X
Xaalek

运行 .exe 文件,然后暂停 cmd

批处理脚本示例:

@echo off
myProgram.exe
PAUSE

带参数的批处理脚本示例:

@echo off
myProgram.exe argumentExample1 argumentExample2
PAUSE

我添加了 @echo off,因为我不想在 cmd 中显示 C:\user\Desktop>myProgram.exeC:\user\Desktop>PAUSE


I
Igor Golodnitsky

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

如果您希望您的 cmd 在特定的长位置打开


F
Fox GamingYT

添加暂停(如果您不想显示其他任何内容,请添加)>nul 它应该看起来像:@echo off title nice echo hello pause>nul 你将看到的只是“你好”


K
KneesDev

我个人放了 pause >nul 并等待按下一个键而不在控制台中显示任何额外的文本。