我正在编写一个选择你自己的冒险游戏。我可以选择在桌面上查看海报或文档,然后游戏会在桌面上打开带有海报艺术或文档的.jpg文件,然后我希望游戏关闭.jpg 5秒后归档。我发现有很多关于如何使用exit / b和taskill关闭程序和.exe的问题,但没有关于关闭像图像查看器这样的程序查看的特定打开文件的问题。在我的情况下,使用Windows照片查看器打开.jpg。窗口的标题是“BADGE.jpg - Windows Photo Viewer”,如果可以的话,当游戏在另一台计算机上播放时,可能会有一个不同的默认图像查看器,所以我需要一种方法来关闭文件而不管是什么程序打开它。
下面的是我的代码片段。 :Test1是我的问题所在
@ECHO OFF
: START
CLS
ECHO THIS IS A TEST PROGRAM TO SHOW THE USER AN IMAGE
ECHO OR FILE AND THEN CLOSE AFTER 5 SECONDS
PAUSE >NUL
GOTO TEST1
: TEST1
ECHO PRESS ENTER TO OPEN IMAGE
ECHO.
PAUSE
START "" "%~dp0\BADGE.jpg"
PING -n 2 0.0.0.0 1>NUL
exit "%~dp0\BADGE.jpg"
:: TASKKILL /F /IM BADGE.jpg
PAUSE
goto end
: end
echo.
echo IF THE IMAGE CLOSED AFTER 5 SECONDS THEN THIS TEST WAS A SUCCESSFUL
PAUSE
GOTO START
答案 0 :(得分:0)
使用允许使用通配符的/fi
开关(过滤器):
taskkill /fi "windowtitle eq BADGE.jpg"
无关紧要,如果*
为- Windows Photo Viewer
或- IrfanView
或其他内容不一样 - 只要窗口标题以给定的文件名开头。
下行:它将使用给定的窗口标题终止每个进程(虽然它不太可能,但不止一个)
注意:start
启动另一个cmd
窗口 - 这不是必需的,只需使用"%~dp0\BADGE.jpg"
,这将打开jpg,而它是默认应用程序。正如您所想的那样,exit
也不起作用。您无法退出其他进程,您将始终退出批处理文件。
答案 1 :(得分:0)
我已经测试了以下脚本,认为该脚本可以为您工作;
@echo off
start file9876.jpg
timeout 5
for /F "tokens=2 delims= " %%i in ('tasklist /v /fo table ^| findstr /i file9876') do set pid=%%i
taskkill /PID %pid%
最好是要打开/显示的文件具有非常唯一的名称,以便可以将其放入findstr
命令中。就我而言,其file9876
。不要在扩展名后加上完整的文件名-您的程序可能不会显示它。如果它也没有显示文件名,只需手动将其打开并检查窗口名(这就是脚本所要查找的内容)。
并且非常重要-请勿在循环后移动timeout line
,因为您的程序实际上可能无法充分启动,并且它不会包含在任务列表中,因此找不到它并且它将保持打开状态(也在我自己的皮肤上进行了测试)。
您可以对其进行改进,以检查程序是否真正启动,然后查找PID,还检查其是否已关闭,等等-进行一些基本检查以使其更加安全。
我试图使此脚本尽可能简短,整洁-希望对您有所帮助:)