在下面显示的批处理文件的上下文中测试errorlevelTASKKILL的正确语法是什么?

:Launch
   start "CloseMe" "C:\Program Files\internet explorer\iexplore.exe" "file://C:\ProgramData\Schneider Electric\Citect SCADA 2016\User\1173051_SM_STP\Files\Stony Mountain Institute Lift Station.html"
   TIMEOUT 1 &
:ShiftFocus
   wscript "C:\ProgramData\Schneider Electric\Citect SCADA 2016\User\1173051_SM_STP\Files\SendAltTab.vbs"
   TASKKILL /IM iexplore.exe /FI "WINDOWTITLE eq CloseMe - Internet Explorer"
   if %errorlevel% == 1 GOTO ShiftFocus
:End
exit

我正在尝试获取批处理文件以运行TASKKILL,然后测试结果。

如果结果为“INFO:没有指定的条件运行任务”。我需要批处理文件才能再次尝试TASKKILL

如果结果为“成功:将终止信号发送给...”。我需要关闭批处理文件。

为此,我使用了关于herehere的if语句,标签和gotos。

我怀疑我使用了错误级别,因为从批处理文件的角度来看,不管什么TASKKILL进行错误级别设置,它的错误级别都是0。类似帖子的某些答案使用%errorlevel%,而其他答案使用errorlevel。无论我在批处理文件中使用哪种格式,无论TASKKILL的实际结果如何,其错误级别均为0。

最佳答案

当您提供过滤器taskkill导致结果不匹配时,ErrorLevel会清除/FI!但是,当仅过滤图像名称(/IM)或进程ID(/PID)时,如果未遇到匹配项,则ErrorLevel会设置为128

因此,我将通过tasklist预先过滤进程,并将taskkill/PID过滤器一起使用:

:LOOP
rem // Establish a short wait time to not heavily load the processor:
> nul timeout /T 1 /NOBREAK
rem // Prefilter processes and retrieve the PID of the applicable one:
set "PID=" & for /F "tokens=1* delims=:" %%T in ('
    tasklist /FI "IMAGENAME eq iexplore.exe" /FI "WINDOWTITLE eq CloseMe - Internet Explorer" /FO LIST
') do if "%%T"=="PID" for /F %%W in ("%%U") do set "PID=%%W"
rem // Loop back in case no PID could be retrieved:
if not defined PID goto :LOOP
rem // Try to kill the task and loop back in case of failure:
taskkill /PID %PID% || goto :LOOP

关于windows - 测试TASKKILL的错误级别的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51295176/

10-11 18:58