2017-08-16 79 views
1

的一些输出我有一个批次中止特定进程。启动它后,我想隐藏Ignoring: <ProcessName>并只显示Terminating: <ProcessName>,所以我怎么能这样做呢?如何隐藏WMIC查询

@echo off 
cls 
title prockiller 
setlocal 

:Whitelist 
set "whitelist=Microsoft Avast Panda ESET Kaspersky Avira AVG Bitdefender Malwarebytes Norton McAfee GAS IBM" 

:Analyze 
for /f "tokens=2 delims=," %%I in (
    'wmic process get executablepath^,status /format:csv ^| find "\"' 
) do (
    set "proc=%%~I" 
    setlocal enabledelayedexpansion 
    wmic datafile where "name='!proc:\=\\!'" get manufacturer 2>nul | findstr /i "%whitelist%" >nul && (
     echo Ignoring: %%~nI 
    ) || (
     echo Terminating: %%~nI && taskkill /im "%%~nxI" /f /t >nul 2>&1 
    ) 
    endlocal 
) 

在此先感谢。

+1

IMO您编辑死你的问题。如果某人不知道它们的来源,那么人们如何能够了解当前的代码片断,并保留变量在考虑过之后,请最后一次[mcve]。 – LotPings

+0

对不起,但我试图进行更全面的总结,无论如何编辑整个代码。 – wagner4362

+0

变化'回声忽略:%%〜nI'为'REM回声忽略:%%〜nI' - 还是我误解你的问题? –

回答

0

这里有一个快速未经测试版本:

@Echo Off 
Title Process killer with a whitelist 

Set "IPL=Avast AVG Avira BitDefender ESET GAS IBM Kaspersky Malwarebytes" 
Set "IPL=%IPL% McAfee Microsoft Norton Panda" 

For /F "Skip=1 Delims=" %%A In (
    'WMIC Process Where "Not ExecutablePath Is Null" Get ExecutablePath' 
) Do For /F "Delims=" %%B In ("%%~A") Do Call :Sub %%~B 
Timeout -1 
Exit/B 

:Sub 
Set "proc=%*" 
For %%A In ("%proc:\=\\%") Do (
    WMIC DataFile Where "Name='%%~A' And Not Manufacturer Is Null"^ 
    Get Manufacturer|FindStr/IVX "Manufacturer"|FindStr/I "%IPL%">Nul||(
     Echo Terminating "%proc%" 
     Echo=TaskKill /F /IM "%%~nxA" /T)) 

从最后一行删除Echo=以及可选的Timeout -1线,如果控制台输出看起来还好。

0

,如果你想这样你可以重定向igonring进程列表成日志文件的输出:

@echo off 
Title Process killer with a white list 
cls 
setlocal 
set "Ignoring_Process_List=%~dpn0_Ignoring_Process_List.txt" 
set "Terimnated_Process_List=%~dpn0_Terimnated_List.txt" 
If exist "%Ignoring_Process_List%" Del "%Ignoring_Process_List%" 
If exist "%Terimnated_Process_List%" Del "%Terimnated_Process_List%" 

:Whitelist 
set "whitelist=Microsoft Avast Panda ESET Kaspersky Avira AVG Bitdefender Malwarebytes Norton McAfee GAS IBM" 

:Analyze 
for /f "tokens=2 delims=," %%I in (
    'wmic process get executablepath^,status /format:csv ^| find "\"' 
) do (
    set "proc=%%~I" 
    setlocal enabledelayedexpansion 
    wmic datafile where "name='!proc:\=\\!'" get manufacturer 2>nul | findstr /i "%whitelist%" >nul && (
     (echo Ignoring: %%~nxI)>>!Ignoring_Process_List! 2>&1 
    ) || (
     (echo Terminating: %%~nxI)>con 
     (echo Terminating: %%~nxI && Taskkill /im "%%~nxI" /f /t)>>!Terimnated_Process_List! 2>&1 
    ) 
    endlocal 
) 
Timeout /T 5 /nobreak>nul 
+0

@Compo好吧,最终的代码会是怎样?只需更换这条线? – wagner4362

+0

@ wagner4362这段代码适合我!你是否尝试过? – Hackoo

+0

@Hackoo是的工作,但我相信有一种方法可以更快地完成这项任务 – wagner4362