首页 > 解决方案 > 如何在 Windows cmd 中循环执行任务,如果任务不在列表中,则仅输出任务?

问题描述

我正在尝试将不需要的任务输出到 Windows 命令行。最终的结果应该是我基本上只需点击一下按钮就可以杀死所有不需要的任务。但为了避免任何问题,我现在输出任务名称。我知道还有其他方法,比如在msconfigor上禁用它们regedit,但现在这就是我想要的。

问题是我已经很久没有使用控制台了,这让我有点困惑。我有下面的代码输出所有正在运行的任务,但它不会停止输出mylist数组中的任务。我认为问题在于我的嵌套for循环,但我不知道将两个数组传递给一个列表的任何其他方法,以便我可以检查它们。任何帮助将不胜感激。

@echo off
set mylist=csrss.exe, dwm.exe, System, smss.exe Rem<<List
for /f "tokens=1" %%a in ('tasklist') do ( Rem<<This returns process name
    for %%b in ('%mylist%') do ( Rem<<b is MEANT to be each process in list
        if not %%a == %%b ( Rem<<If anything in tasklist is in mylist, don't include it
            echo %%a) Rem<<Output processes NOT in mylist.
    )
)
pause

标签: batch-file

解决方案


在以下帮助下更容易findstr

@echo off
set "mylist=csrss.exe dwm.exe System smss.exe"
for /f "tokens=1" %%a in ('tasklist^|findstr /biv "%mylist%"') do echo %%a 
pause

findstr开关:
- b = 行首
- i = 忽略大小写(可选)
- v = 排除给定字符串


推荐阅读