Hod*_*rmy 13 windows windows-explorer process batch-file
我有一个更改一些注册表文件的批处理文件,然后重新启动 explorer.exe 以使它们生效。我正在使用命令
taskkill /f /im explorer.exe
explorer.exe
Run Code Online (Sandbox Code Playgroud)
这当然会杀死所有explorer.exe 进程,包括我打开的资源管理器窗口。(显然,我正在使用该选项Launch folder windows in a separate process。)
有什么方法可以确定哪个 explorer.exe 实例是主要的,然后杀死它?
@techie007 建议explorer.exe用 window title杀死N/A。
for /f "tokens=2,10" %%p in ('tasklist /nh /v /fi "imagename eq explorer.exe"') do if "%%q"=="N/A" taskkill /f /pid %%p
Run Code Online (Sandbox Code Playgroud)
tasklist /nh /v /fi "imagename eq explorer.exe"详细列出所有带有映像名称的进程explorer.exe。
for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
执行COMMAND1. 对于每一行输出,它将变量%%p和%%q设置为第二个和第十个“标记”(以空格分隔)并执行COMMAND2.
在 的情况下taskkill /v,%%p 现在保存 PID 和%%q窗口标题(的开头)。
if "%%q"=="N/A" taskkill /f /pid %%p检查窗口标题是否为N/A.
如果是,它会用 终止进程taskkill。
@Syntech 指出,这对于 Windows 资源管理器来说是不可靠的,但在程序中,主进程始终具有最高的内存使用率。
for /f "tokens=2" %%p in ('tasklist /nh /fi "imagename eq explorer.exe" ^| sort /+65') do @set explorerpid=%%p
taskkill /f /pid %explorerpid%
Run Code Online (Sandbox Code Playgroud)
tasklist /nh /fi "imagename eq explorer.exe"列出所有具有映像名称的进程explorer.exe。
sort /+65 从第 65 个字符(内存使用开始的地方)开始对先前的输出进行排序。
for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p设置explorerpid为tokens=2输出的每一行的第二个 ( ) 输入 - 由空格分隔COMMAND,这是相应的 PID。
由于tasklist的输出已被排序,explorerpid保存声明的 PID,并taskkill终止进程。