批处理文件 - TASKKILL/FI"WINDOW TITLE ..."无效

mik*_*ung 6 batch-file

我正在尝试制作批处理文件:

  1. 推出互联网浏览器
  2. 等待Internet Explorer将本地.html文件加载到其Web浏览器中
  3. 等待弹出窗口加载
  4. 关闭在步骤1中打开的资源管理器窗口(不影响以前可能打开的任何网页)
  5. 闭嘴

我已经得到了除步骤4之外的所有内容,使用下面显示的批处理文件.

cd "C:\Program Files\internet explorer"
start "CloseMe" iexplore.exe "file://C:\ProgramData\Schneider Electric\Citect SCADA 2016\User\1173051_SM_STP\Files\Stony Mountain Institute Lift Station.html"
TIMEOUT 3 & REM Waits 3
TASKKILL /IM iexplore.exe /FI "WINDOWTITLE eq CloseMe - Internet Explorer"
exit
Run Code Online (Sandbox Code Playgroud)

如果我注释掉退出命令并跳过第5步,我可以看到我收到的错误消息.这是INFO:没有使用指定条件运行的任务.

我运行了这个命令(感谢aschipfl),看起来我的Window Title没有被正确设置为CloseMe.

C:\ProgramData\Schneider Electric\Citect SCADA 2016\User\1173051_SM_STP\Files>tasklist /FI "IMAGENAME eq iexplore.exe" /v

Image Name                     PID Session Name        Session#    Mem Usage Status          User Name                                              CPU Time Window Title
========================= ======== ================ =========== ============ =============== ================================================== ============ ========================================================================
iexplore.exe                 18076 Console                    1     36,300 K Running         STONY-STP\Operator                                      0:00:00 MultiSmart - Internet Explorer
iexplore.exe                 15864 Console                    1     40,448 K Running         STONY-STP\Operator                                      0:00:00 N/A
iexplore.exe                 18072 Console                    1    155,600 K Running         STONY-STP\Operator                                      0:00:06 N/A

C:\ProgramData\Schneider Electric\Citect SCADA 2016\User\1173051_SM_STP\Files>
Run Code Online (Sandbox Code Playgroud)

我在两个地方将Window Title设置为CloseMe.

  1. 在批处理文件的第二行(向上滚动)
  2. 在.html文件中(见下文)

    <title>CloseMe</title>  
    <BODY onLoad="popup('http://192.168.0.10/config.htm', 'Stony Mountain Institute Lift Station')"> 
    
    <SCRIPT TYPE="text/javascript">
       function popup(mylink, windowname) {  
          if (! window.focus)return true;  
             var href;
          if (typeof(mylink) == 'string') href=mylink;  
          else href=mylink.href;
          window.open(href, windowname, 'width=800,height=480,scrollbars=no');  
          //self.close(); 
          return false;
       }  
    </SCRIPT> 
    
    Run Code Online (Sandbox Code Playgroud)

sst*_*sst 1

Internet Explorer 在内部从当前处于活动状态的选项卡标题派生出其主窗口标题。

因此,您将在任务列表的输出中看到的内容Window Title基于 Internet Explorer 中当前活动的选项卡的标题。

从第一个支持选项卡式浏览的 Internet Explorer 7 开始,不可能在不影响其他选项卡的情况下杀死iexplorer.exe的实例。单个iexplorer.exe实例可以托管多个窗口或选项卡,因此终止该实例将破坏它托管的所有选项卡或页面。

因此,我们假设您想要的标题为 的选项卡恰好是活动选项卡,因此可以通过和CloseMe找到它,然后向主窗口发送终止信号taskkilltasklistTASKKILL /IM iexplore.exe /FI "WINDOWTITLE eq CloseMe - Internet Explorer"iexplore.exe

在默认配置中,Internet Explorer 始终询问您是否要关闭当前选项卡或关闭所有选项卡,因此用户可以选择仅关闭当前选项卡。但这需要用户的交互,而且可能不是您最初的意图。

另一种很常见的可能性是 Internet Explorer 配置为始终关闭所有选项卡而不询问。这本质上相当于杀死 Internet Explorer 的所有实例,因此没有必要按WINDOWTITLEin进行过滤taskkill。你可以直接使用TASKKILL /IM iexplore.exe,效果相同,但成功率100%。

为此,您需要一个实用程序将CLOSE消息发送到所需的窗口,以仅关闭该特定窗口而不是整个过程。

Windows 没有用于执行此操作的内置工具,但如果您可以使用第三方工具,那么NirCmd就是您所需要的。

nircmdc.exe win child process "iexplore.exe" child class "Frame Tab" close ititle "CloseMe"

在 Windows 7 x64 上使用 Internet Explorer 11 进行测试