2015-02-18 2 views
0

Я пытаюсь сделать пакетный файл, а часть его завершает все необходимые процессы, кроме cmd и chrome. До сих пор у меня есть:Пакетное уничтожение всех процессов, кроме non essential и cmd

cd c:\windows\System32 
for /f "skip=3 tokens=1" %%i in ('TASKLIST /FI "USERNAME eq %userdomain%\%username%" /FI "STATUS eq running"') do (
if not "%%i"=="cmd.exe" (
if not "%%i"=="C:\Windows\system32\cmd.exe" (
if not "%%i"=="svchost.exe" (
if not "%%i"=="tasklist.exe" (
if not "%%i"=="fun.bat" (
if not "%%i"=="mine.vbs" (
if not "%%i"=="chrome.exe" (
taskkill /f /im "%%i" 
)))))))) 

(взято из http://agnipulse.com/2009/02/kill-all-running-apps-with-a-double-click/ затем слегка eddited)

и все это работает, кроме if not "%%i"=="cmd.exe" ( по какой-то причине терминал выходит, даже если он не должен. Может ли кто-нибудь сказать, почему и как исправить это или по-другому прекратить все не существенные процессы?

редактировать: Кроме того, если я добавить pause до конца он никогда не получает, что так я теперь думать, что программа убивает свой собственный процесс до его завершения остальной части программы, даже если cmd.exe находится в списке исключений. кто-нибудь думает, что это может быть проблемой и любыми идеями о том, как это исправить?

+0

Отсутствует/d в cd c: \ windows \ system32. То, как у вас есть это, будет просто использовать th-каталог, на который указывает cmd. Используйте cd/d c: \ windows \ system32 и посмотрите, помогает ли это. –

+0

попробовал, чтобы разница не выходила из терминала – club998

+0

Внимательно проверьте вывод 'TASKLIST ...'. Здесь я могу увидеть 'explorer.exe'. Убийство убивает оболочку Windows. Запустите 'explorer.exe' в конце вашего скрипта. – JosefZ

ответ

2

Я подозреваю, что ответ на ваш вопрос заключается в том, что терминал выходит из-за двойного нажатия командного файла. Хочешь это или нет, это ожидаемое поведение. Действие, связанное с двойным щелчком (как определено в реестре), обычно cmd /c script.bat. Переключатель /c запускает команду и завершает работу. Если вы хотите сохранить двойного щелчка активированные консоли в живых после всех других задач, убивают, добавьте pause в конце, или, возможно, добавить обертку в верхней части сценария с cmd /k, что-то вроде этого:

set "caller=%cmdcmdline:"=%" 
if /I "%caller:~0,6%"=="cmd /c" (
    cmd /k "%~f0" 
    goto :EOF 
) 

Я вижу еще пару других вопросов. Вы просматриваете свой список задач для сценария .bat и файла .vbs. Это не исполняемые файлы. Процессы их анализа будут cmd.exe и cscript.exe, соответственно.

Предлагаю другое направление. Что бы вы думали, вместо белых списков исполняемых файлов вы выбрали вместо издателей? В этом примере я использую белый список Microsoft, Mozilla, Kingsoft (мой антивирусный сканер), помощники драйверов Nvidia (аудио, видео, LAN и т. Д.) И Google; и убить procs от других издателей.

@echo off 
setlocal 

set "whitelist=Microsoft Google Mozilla Kingsoft Nvidia" 

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

Таким образом, любые критические процессы, вы, возможно, уже забыли включить, такие как explorer.exe, не будут убиты, потому что они опубликованы Microsoft.

+0

Извините, я, возможно, мог сформулировать свой вопрос лучше, но это было только частью моего кода ранее, он открывает вторую пакетную программу, которая работает в постоянном цикле, и это вторая 1, которая выходит, когда я этого не хочу. Я также думал, что программа может закончиться до того, как она закончит финал других? – club998

0

Вы не хотите убивать conhost.exe. Он содержит оболочку. В linux conhost - bash, а cmd - gnome-terminal. Так что исключайте и conhost. Кроме того, если вы даете это кому-то, у кого нет английской раскладки клавиатуры QWERTY, добавьте ctfmon.exe.

Смежные вопросы