2017-08-16 2 views
1

J'ai un batch qui tue certains processus. Après le démarrage, je veux cacher Ignoring: <ProcessName> et afficher seulement Terminating: <ProcessName>, alors comment je peux le faire?Comment cacher une sortie de requête 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 
) 

Merci d'avance.

+1

IMO vous avez modifié votre question à mort. Comment quelqu'un peut-il comprendre vos fragments de code actuels en restant pour les variables sans connaître leur origine. S'il vous plaît [modifier] une dernière fois avec un [mcve] après avoir réfléchi à ce sujet. – LotPings

+0

Désolé mais j'ai essayé d'être plus résumé, de toute façon édité avec tout le code. – wagner4362

+0

Change 'echo Ignoring: %% ~ nI' en' REM echo Ignoring: %% ~ nI' - ou est-ce que je ne comprends pas votre question? –

Répondre

0

est ici une version non testé rapide:

@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)) 

Retirez Echo= de la dernière ligne , et éventuellement la ligne Timeout -1, si la sortie de la console semble correcte.

0

Vous pouvez rediriger la sortie de igonring liste des processus dans un fichier pour l'enregistrement si vous voulez comme ceci:

@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 Ok et comment le code final serait? Remplace juste cette ligne? – wagner4362

+0

@ wagner4362 ce code a fonctionné pour moi! et avez-vous essayé ou non? – Hackoo

+0

@Hackoo Oui a travaillé mais je crois qu'il y a un moyen de faire plus vite cette tâche – wagner4362