Mam plik wsadowy, który zmienia kilka plików rejestru, a następnie ponownie uruchamia explorer.exe, aby zadziałały. Używam poleceń
taskkill /f /im explorer.exe
explorer.exe
To oczywiście zabija wszystkie procesy explorer.exe, w tym otwarte okna eksploratora. (Oczywiście używam tej opcji Launch folder windows in a separate process
.)
Czy jest jakiś sposób, aby określić, która instancja explorer.exe jest główna, i po prostu ją zabić?
windows
windows-explorer
process
batch-file
Hod - Armia Moniki
źródło
źródło
explorer.exe
instancji, ale z przeciwnego powodu. Uważam za denerwujące, że odradzaneexplorer.exe
procesy nie zawsze kończą się, gdy wszystkie powiązane okna są zamknięte. Używam Menedżera zadań do ich zabijania i zwykle polegam na tym, że odradzane instancje mają zwykle wysoki priorytet (z jakiegoś powodu). Działa to dobrze, ale jeśli zdarzy się, że ustawiłem go na normalny (z oczywistych powodów), ryzykuję przypadkowe zabicie pierwotnego procesu.taskkill /f /im explorer.exe /fi "windowtitle ne N/A"
. Z jakiegoś powodu kopiowanie / wklejanie tego do monitu cmd nie działa; musisz wpisać go ręcznie. Nie próbowałem pliku wsadowego.Odpowiedzi:
Podejście oparte na tytule okna
@ techie007 zasugerował zabicie
explorer.exe
tytułu oknaN/A
.Komenda
Jak to działa
tasklist /nh /v /fi "imagename eq explorer.exe"
wyczerpująco wymienia wszystkie procesy z nazwą obrazuexplorer.exe
.for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
Wykonuje
COMMAND1
. Dla każdego wiersza wyniku ustawia zmienne%%p
oraz%%q
drugi i dziesiąty „token” (rozdzielone spacją) i wykonujeCOMMAND2
.W przypadku
taskkill /v
,%%p
teraz posiada PID i%%q
(początek) tytuł okna.if "%%q"=="N/A" taskkill /f /pid %%p
sprawdza, czy tytuł okna toN/A
.Jeśli tak, kończy proces za pomocą
taskkill
.Podejście oparte na użyciu pamięci
@Syntech wskazał, że jest to niewiarygodne w Eksploratorze Windows, ale w programach główny proces zawsze ma najwyższe wykorzystanie pamięci.
Komenda
Jak to działa
tasklist /nh /fi "imagename eq explorer.exe"
wyświetla wszystkie procesy z nazwą obrazuexplorer.exe
.sort /+65
sortuje poprzednie dane wyjściowe, zaczynając od 65. znaku (gdzie zaczyna się użycie pamięci).for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p
ustawiaexplorerpid
na drugietokens=2
wejście ( ) oddzielone spacjami - każdego wiersza wyjściaCOMMAND
, który jest odpowiednim PID.Ponieważ
tasklist
wyjście zostało posortowane,explorerpid
przechowuje deklarowany PID itaskkill
kończy proces.źródło
Być może możesz powiedzieć Eksploratorowi, aby pokazał ścieżkę na pasku tytułu, a następnie użyć
WINDOWTITLE
filtru, aby zabić go na tej podstawie?Ścieżka nie będzie wyświetlana na pasku tytułowym Eksploratora z „nieklasycznymi” motywami, ale jest (teraz); to po prostu nie jest widoczne.
taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"
Może być konieczne tymczasowe przejście do klasycznego motywu, aby określić ścieżkę / tytuł dla wystąpienia Eksploratora, który chcesz zrestartować.
Nie w 100% głupi, ale każde okno Eksploratora, które nie ma (częściowej) ścieżki w tytule, byłoby przynajmniej bezpieczne. :)
edytować:
Ponieważ chcesz pobrać ten z tytułem „N / A”, prawdopodobnie będziesz musiał użyć pliku wsadowego, abyś mógł tokenizować wyniki TASKLISTY i użyć tych wyników tokenów do użycia TASKKIL do zabicia przez PID.
Znalazłem odpowiedź na StackOverflow.com, która rozwiązuje ten problem:
Z pytania Zadaj zabić proces bez tytułu? to ta odpowiedź, która zawiera przykładowy plik wsadowy:
Będziesz chciał zmienić polecenie „TASKLIST / V”, aby było bardziej specyficzne dla Explorer.exe i tak dalej, ale powinno dać ci dobry punkt wyjścia.
źródło
tasklist /fi "imagename eq explorer.exe" /v /fo list
mówi mi, że jego tytuł okna to „N / A”. Niestety, „„ windowtitle eq N / A ”nie działa. Jakieś pomysły?Zabij proces z najniższym PID (ID procesu). Najpierw zostałby uruchomiony, ponieważ procesy są kolejno numerowane.
źródło
tasklist | find /f "explorer"
i zapytać, a następnie zapytać (z danymi użytkownika), jaki jest najniższy PID do zabicia.sed
,awk
itp.), To dość łatwe do zrobienia automatycznie. Jeśli nie, dane wejściowe użytkownika mogą być najlepszym wyborem.