如何在批处理文件执行后自动关闭cmd窗口?

126

我正在运行一个批处理文件,其中包含以下两行:

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

这个批处理文件用于启动Xming应用程序,然后启动PuTTY应用程序,以便我可以通过SSH连接到我的大学计算机实验室。

然而,如果我运行此文件并且Xming尚未打开,一旦我从PuTTY终端退出,cmd窗口仍然保持打开状态。只有当我已经运行了Xming时,关闭PuTTY终端时cmd窗口才会关闭。我已经尝试将exit添加到批处理文件的最后一行,但无济于事。


1
"C:\Program Files (x86)\Xming\Xming.exe" 是 putty.exe 的参数,还是一个独立的命令? - bpoiss
如果第二行是第二个命令,请尝试在其前面也加上“start”。 - Gray
1
@BernhardPoiss 这是一个单独的命令,而不是 putty.exe 的参数。如果我把这行放在最前面,它会卡住并且无法打开 putty。如果我在它前面加上 start,Windows 会显示“找不到'C:\Program',请确保输入正确。” - yiwei
恭喜!这个问题已经获得了第一百个赞。 - Syed M. Sannan
12个回答

0

阅读了几篇答案后,我通过实验学到了一些东西:

  1. 以CMD结尾的文件与以BAT结尾的文件将被稍微不同地处理。

  2. 我试图使用silentCMD.exe运行,但问题是silentCMD会一直等待任何启动的程序完成运行,然后再报告任务已经完成......即使CMD窗口提前退出。

  3. 使用move nul 2>&0似乎可以工作,但退出代码永远不会被正确传递。因此,在使用任务计划程序时,除非您能够某种方式检测到确切的奇怪结果并解决它,否则可能会产生奇怪的结果。

解决方法是直接运行任务计划程序(或bat/cmd脚本),而不使用silentCMD来启动它。


.BAT 文件扩展名

@echo off

if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized

taskkill /IM "Program.exe" /T /F

start "" "C:\Program.exe" /arg1 /arg2

TIMEOUT /T 2 /NOBREAK

EXIT /B

if not "%minimized%"=="" goto :minimized 这部分的作用是以最小化的方式启动bat(或cmd)。很难让CMD窗口保持安静,所以这是下一个最好的选择。

BAT文件似乎只需要正常退出而无需进行任何额外操作。


如果使用 .CMD 文件扩展名

@echo off

if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized

taskkill /IM "Program.exe" /T /F

cmd /c start "" "C:\Program.exe" /arg1 /arg2

TIMEOUT /T 2 /NOBREAK

EXIT /B

在启动脚本后关闭它,你必须在start之前使用cmd /c


-1

只需按照以下方式尝试/s

在批处理文件中的最后一行键入:

exit /s

以上命令将关闭Windows CMD窗口。

/s - 代表静默模式,即(它将等待键盘输入)。


2
cmdexit 命令没有 /s 开关(而且即使有也是无意义的)。 - Stephan
你可以使用 exit/任意字符 来得到相同的结果,所以没有什么新的...尝试使用 exit/pizza 也可以做到同样的效果... - Io-oI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接