2013-07-12 12 views
6

Jak sprawdzić, czy proces jest uruchamiany z pliku wsadowego/cmd? A jeśli proces jest uruchomiony, jak zatrzymać proces automatycznie?Jak automatycznie zatrzymać proces za pomocą skryptu wsadowego?

Coś w stylu skryptu cmd, czy ktoś może mi podpowiedzieć lub pomóc mi wykonać ten skrypt.

Przykład (pseudo kod):

If calc.exe is running       
Stop calc.exe 

chcę coś takiego:

@echo off 

:x 
PATH=C:\Windows\System32\calc.exe 
If calc.exe is ON goto Process_Stop 

:Process_Stop 
net stop calc.exe 
goto x 

Odpowiedz

13

Po pierwsze, masz złe polecenie zatrzymania procesu takiego jak calc.exe. NET STOP zatrzyma usługę, ale nie będzie to normalny proces programu. Zamiast tego potrzebujesz TASKKILL.

Po drugie - Jeśli wiesz, że chcesz zabić proces, jeśli istnieje, to dlaczego uważasz, że musisz sprawdzić, czy działa on pierwszy, zanim go zabijesz? Możesz po prostu spróbować zabić proces niezależnie. Jeśli nie istnieje, generowany jest błąd i nie wyrządza się szkody. Jeśli istnieje, to zostaje zabity z komunikatem o powodzeniu.

taskkill /im calc.exe 

Jeśli nie chcesz, aby zobaczyć komunikat o błędzie, a następnie przekierować stderr do nul użyciu 2>nul. Jeśli nie chcesz zobaczyć komunikatu o powodzeniu, przekieruj stdout do nul, używając >nul.

taskkill /im calc.exe >nul 2>nul 

Jeśli chcesz podjąć działania w zależności od wyników, a następnie można użyć warunkowe && i || operatorów sukcesu i porażki.

Lub możesz użyć ERRORLEVEL do ustalenia, co zrobić w zależności od wyniku. bardziej czytelne i prostsze komenda

0

Wyjazd polecenie tasklist - Komenda ta daje listę zadań i usług, które są uruchomione. Sprawdź, czy zadanie, które Cię interesuje, działa przy użyciu wyrażeń regularnych:

Następnie użyj polecenia taskkill, aby zabić usługę lub zadanie.

+0

To raczej komentarz niż odpowiedź. – Neolisk

3

A jest coś takiego:

taskkill/F/FI "imageName eq calc.exe"

Metodologia ta nie zwraca kod błędu, jeśli proces nie jest działa, gdy przełącznik/IM WILL zwraca błąd, jeśli proces nie jest uruchomiony. Można również użyć dzikie karty jak:

taskkill/F/FI „imageName eq calc * .exe” zabić dowolny proces, który zaczyna się od „calc” i kończy z „.exe” w nazwie.

+1

Użyłem tego z powodzeniem jako wstępne wydarzenie dla projektów w roztworze w Visual Studio od wielu lat, fyi. – outbred

Powiązane problemy