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

Jua*_*uan 3 windows cmd batch-file

我已经制作了一个基本的 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
Run Code Online (Sandbox Code Playgroud)

此外,我创建了一个 Windows 任务来每 x 小时运行一次 BAT。

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

在此处输入图片说明

我想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));
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为该窗口不会用“Enter”或“ALT F4”关闭,只有当我们点击“完成”或十字“x”来关闭窗口时它才会关闭(如果它有效,它会有再次设置时间的问题)。

更新过程完成后,有没有办法自动关闭该窗口?

Ste*_*han 8

vpsupd.exe支持/silent开关以抑制用户交互。

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

vpsupd.exe /silent
Run Code Online (Sandbox Code Playgroud)