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

我正在运行一个批处理文件,其中有两行:

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添加到批处理文件的最后一行,但没有用。

487870 次浏览

将批处理文件修改为 START两个程序,而不是 STARTing 一个和 CALLing 另一个

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

如果您像这样运行它,那么在启动程序之后,CMD 窗口将不会保持打开状态。

我有这个,我添加了 EXIT,最初它不工作,我想每个需要的 called program exiting建议在另一个响应在这里提到,但它现在工作没有进一步的废话-不知道是什么原因,但要注意的是,我调用一个数据文件 .html,而不是程序处理它 browser.exe,我没有编辑其他任何东西,但足以说,它是更简洁的只是使用一个 bat 文件访问这些网络文件的主要访问页面,只有 title.batcontents.batindex.bat在根文件夹中的其余内容在一个子文件夹。

即: contents.bat 读取

cd subfolder
"contents.html"
exit

如果我只为这些项目更改 bat 文件图标,以适应它们所在的上下文,看起来也会更好,但那是另一回事,将 bat 文件隐藏在子文件夹中,并在根文件夹中创建自定义图标快捷方式,同时隐藏要求自定义的图像。

你可以试试有点危险的: taskkill /IM cmd.exe。.危险的 bcz 将杀死 cmd 打开和任何 cmd 的打开之前。

或者添加一个验证来确认您拥有正确的 cmd.exe,然后通过 PID 杀死它,如下所示:

set loc=%time%%random%
title=%loc%
for /f "tokens=2 delims= " %%A in ('tasklist /v ^| findstr /i "%loc%"') do (taskkill /PID %%A)

如果你想先检查一下 (taskkill /PID %%A),可以用 (pslist &&A)或者 (tasklist /FI "PID eq %%A")代替它(也许还安装了凳子)。

这招对我很管用。我只是想在退出游戏后自动关闭命令窗口。我只要双击。我桌面上的 bat 文件。没有捷径。

taskkill /f /IM explorer.exe
C:\"GOG Games"\Starcraft\Starcraft.exe
start explorer.exe
exit /B

You normally end a batch file with a line that just says exit. If you want to make sure the file has run and the DOS window closes after 2 seconds, you can add the lines:

timeout 2 >nul
exit

但是如果您的批处理文件打开了另一个窗口,那么 exit命令将无法工作,因为当第二个窗口打开时,旧的 DOS 窗口也将显示出来。

解决方案: 例如,有一个叫做 BgInfo的很棒的免费小程序,它可以显示你电脑的所有信息。假设它在一个名为 C:\BgInfo的目录中,要使用 /popup开关从一个批处理文件运行它,并在它仍然运行时关闭 DOS 窗口,请使用:

start "" "C:\BgInfo\BgInfo.exe" /popup
exit

If you want to separate the commands into one command per file, you can do

cmd /c start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"

在另一个文件中,你可以

cmd /c start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

The command cmd /c will close the command-prompt window after the exe was run.

试试下面列出的 /s

作为批处理文件类型的最后一行:

exit /s

上面的命令将关闭 WindowsCMD 窗口。

/s-表示静默(等待键盘输入)。

关闭当前 cmd 窗口 immediately, just add as the last command/line:

move nul 2>&0

Try move nul to nowhere and redirect the stderr to stdin will result in the current window cmd.exe being closed

This is different from closing a bat, or exiting it using goto :EOF or Exit /b

I even opened a question to find an answer that would explain behavior. Would that be a bug? Immediate closing of the current cmd window when executing: move nul 2>&0

有时,您可以引用 Windows“快捷”文件来启动应用程序,而不是使用“。“ bat”文件,并且它不会有残留的提示问题。但它没有蝙蝠文件那么灵活。

我做一些像下面这样的事情

start ""
** code
exit

这是我的工作

用批处理脚本打开 VSCode 后关闭 cmd 窗口

如果你有使用 VSCode 安装的 code命令:

echo | code . | exit /b

如果您以管理员身份运行脚本:

cd /d %~dp0
echo | code . | exit /b

使用 start /b通常会允许 cmd 窗口为其他程序关闭。

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

  1. files ending with CMD vs BAT will be handled slightly differently.

  2. 我试图用 沉默的 CMD运行,但问题是 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部分是最小化发射球棒(或 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,以便在启动后关闭脚本。