bat如何实现关闭当前cmd窗口自动结束指定进程

如题所述

不知道您说的关闭当前CMD窗口,是怎样的一个关法?是让脚本自己运行到退出,还是手动点击右上角的X进行关闭?

如果是脚本自行退出的,那么在退出前写上一段执行taskkill的相关命令即可。

而通过手动点击X进行关闭,那么这个代码就复杂了。先要在脚本开头写一个执行另一个bat的代码,用于监测您当前cmd窗口,只有在监测bat监测不到当前CMD窗口后再执行taskkill命令。追问

对的,就是你说的这个思路,手动点X关闭的时候如何才能做到这种效果

追答@echo off & cd /d "%~dp0"

::设置当前脚本窗口标题名(必须)
set Title=批处理脚本模板文件 By 依梦琴瑶

::设置要强制关闭的进程
set Proc=WinRar.exe


title %title%
call :CheckCMDWindows "%Title%" "%Proc%"


echo 这里区域写您正常要执行的脚本代码


pause
exit

:CheckCMDWindows
(echo @echo off ^& title 监测窗口并结束程序 By 依梦琴瑶
echo mode 70,5 ^& color 0c
echo for /f "tokens=2 delims=," %%%%a in ^('tasklist /fo csv /nh /v ^^^| find /i ",""%~1"""'^) do set "PID=%%%%~a"
echo for /f "tokens=2 delims=," %%%%a in ^('tasklist /fo csv /nh /v ^^^| find /i ",""管理员:  %~1"""'^) do set "PID=%%%%~a"
echo :Loop
echo cls ^& echo 正在监测中,请勿关闭窗口。
echo echo 被监测的窗口:"%~1",PID:%%PID%%
echo echo 被终止的进程:"%~2"
echo tasklist /fi "PID eq %%PID%%" /fo csv /nh ^| find /i ",""%%PID%%""," 2^>nul ^&^& goto Loop
echo taskkill /f /im "%~2"
echo exit)>"%tmp%\CheckCMDWindows.bat"
start "" /min "%tmp%\CheckCMDWindows.bat"
goto :eof

追问

谢谢大神,不过小白表示找不到分段啊,能以结束adb.exe为例帮我写一个然后传给我吗??

追答

什么叫“找不到分段”?

结束指定进程,我的代码中有文字注释啊!直接根据注释,把对应位置的进程名换成您要结束的进程即可。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-04-10
@echo off
set #=q&set/ax=0x53b7e0b4
title Any question +%#%%#% %x%

rem 指定关闭本窗口时要结束的进程
set "进程=calc.exe"
set "self=%~0"
(echo;Set wmi=GetObject^("winmgmts:\\.\root\cimv2"^)
echo;Do while True
echo;    Set ps=wmi.ExecQuery^("select * from win32_process where Name='cmd.exe' and CommandLine like '%%%self:\=\\%%%'"^)
echo;    If ps.Count = 0 Then
echo;        CreateObject^("WScript.Shell"^).Run "cmd /c taskkill /f /im ""%进程%"" /t",0
echo;        WSH.Quit
echo;    End If
echo;    WSH.Sleep 1000
echo;Loop)>"%tmp%\$t.vbs"
start "" "%tmp%\$t.vbs"

echo;此处开始为你自己要执行的代码
pause

第2个回答  2019-04-07
调用c:\a.txt的时候,前面加一个start命令
echo ABC >>C:\a.txt
start c:\a.txt
这样你的批处理执行窗口就会在最后打开a.txt之后关闭了。追问

假设我事先打开了一个计算器,然后进行了一段批处理,那么如何在我关闭这个窗口的同时杀死计算器的进程

相似回答