关闭除某些程序之外的所有程序的批处理文件

Sam*_*Sam 4 powershell batch-file taskkill

我正在尝试编写一个批处理文件(或 powershell 脚本)来关闭所有具有活动窗口的程序(某些程序除外)。我也不希望只关闭 Windows 正在运行的任何程序,只希望关闭我打开的程序。我也无法编写要杀死的程序的列表,所以我不能简单地这样做:

@echo off
set programs[0] = program1;
set programs[1] = program2; etc;

for %%a in (%programs%) do (
  taskkill /F /im %%a
  echo/
)
Run Code Online (Sandbox Code Playgroud)

我想要看起来像这样的东西(<...> 表示我不知道的部分):

@echo off
set safeList[0] = program1;
set safeList[1] = program2; etc;

set activePrograms = <get all active programs that aren't basic windows processes, startup programs, etc.>

for %%a in (%activePrograms%) do (
  if(<%%a not found in safeList>) (
    taskkill /F /im %%a
    echo/
  )
)
Run Code Online (Sandbox Code Playgroud)

显然,activePrograms 部分不应该包含基本的 Windows 任务(即 explorer.exe),因为那样会很混乱。我不想在 safeList 中定义每个正在运行的任务。

Mah*_*wad 5

如果您只想关闭您打开的程序。在任务管理器中显示为App 在此输入图像描述

对于此列表,您可以使用get-process以下命令:

Get-Process | Where-Object {$_.MainWindowTitle -and $_.Description -and $_.Name -ne "ApplicationFrameHost"}
Run Code Online (Sandbox Code Playgroud)

为了终止此应用程序,您可以将输出通过管道传输到命令,Stop-Process如下所示:

 Get-Process | Where-Object {$_.MainWindowTitle -and $_.Description -and $_.Name -ne "ApplicationFrameHost"}  | Stop-Process
Run Code Online (Sandbox Code Playgroud)

最后,我应该像@IRon提到的那样标记杀死程序可能会导致数据丢失,并且您应该在应用之前在每个 Windows 版本上测试此方法。为了不关闭不需要的应用程序。