如何判断哪个“explorer.exe”进程是主要进程?

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 实例是主要的,然后杀死它?

Den*_*nis 9

基于窗口标题的方法

@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设置explorerpidtokens=2输出的每一行的第二个 ( ) 输入 - 由空格分隔COMMAND,这是相应的 PID。

  • 由于tasklist的输出已被排序,explorerpid保存声明的 PID,并taskkill终止进程。