如何在不使用TASKILL的情况下关闭从CMD启动的可执行窗口 [批处理]

3
我已经制作了一个基本的BAT脚本来下载 Avast 病毒数据库更新,然后通过运行下载的文件来应用它们。
@ECHO OFF

set downloadFolder=C:\Users\myuser\Downloads\Avast_updates

set downloadUrl=https://install.avcdn.net/vps18/vpsupd.exe

bitsadmin /transfer myAvastUpdates /download /priority normal ^
  "%downloadUrl%" "%downloadFolder%\vpsupd.exe" 

start /min "Update..." "%downloadFolder%\vpsupd.exe"

exit

此外,我已经创建了一个Windows任务来每隔x个小时运行BAT文件。

一切都正常工作,但是我想知道是否有任何方法可以在更新过程完成后自动关闭可执行窗口。

enter image description here

我考虑使用TASKILL命令等待x秒后关闭窗口,但这不能保证更新进程在x秒内完成,有时可能需要更长的时间,有时可能需要更短的时间,而且我不想在程序安装器中使用该命令。

然后我想通过WshShell.SendKeys发送“Enter”:

set SendKeys=CScript //nologo //E:JScript "%~F0"
cls
timeout /t 5 >nul
%SendKeys% "{ENTER}"

@end

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

但这并不起作用,因为该窗口不会在按下“Enter”或“ALT F4”时关闭,它只有在点击“完成”或关闭窗口的叉号“x”时才会关闭(如果它可以工作,那么它将再次设置时间的问题)。
更新过程完成后,有没有一种自动关闭该窗口的方法?

当与GUI程序一起使用时(因为控制台程序的操作方式不同),Taskkill /im notepad.exe会要求关闭记事本窗口。 - user12431753
2
如果有任何命令行参数,如/silent,请查看vpsupd.exe /? - Stephan
打开命令提示符,cdvpsupd.exe 的位置,然后执行 vpsupd.exe /?。如果不起作用,请尝试 vpsupd.exe -? - Stephan
1
好的,看起来可以使用“vpsupd.exe /silent”静默运行,请尝试一下。 - Gerhard
4
创建一个“社区维基”答案,以便不因此共享解决方案而获取积分。(独自获得荣誉不公平) - Stephan
显示剩余13条评论
2个回答

8

vpsupd.exe支持一个/silent开关来禁止用户交互。

start /min不需要,因为它只会打开另一个cmd窗口,然后运行可执行文件。所以只需要执行:

vpsupd.exe /silent

0

在@Stephan和@Gerhard的帮助下,下载和更新Avast的代码如下:

@ECHO OFF

set "downloadFolder=%userprofile%\Downloads\avast_updates"
set "downloadUrl=https://install.avcdn.net/vps18/vpsupd.exe"
 bitsadmin /transfer myAvastUpdates /download /priority normal ^
 "%downloadUrl%" "%downloadFolder%\vpsupd.exe" 

"%downloadFolder%\vpsupd.exe" /silent

exit

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