J'ai un fichier de commandes qui modifie quelques fichiers de registre, puis redémarre explorer.exe pour qu'ils prennent effet. J'utilise les commandes
taskkill /f /im explorer.exe
explorer.exe
Bien sûr, cela tue tous les processus explorer.exe, y compris les fenêtres d'explorateur que j'ai ouvertes. (Évidemment, j'utilise l'option pour Launch folder windows in a separate process
.)
Existe-t-il un moyen de déterminer quelle instance de explorer.exe est la principale, et de simplement tuer cela?
windows
windows-explorer
process
batch-file
Hod - L'armée de Monica
la source
la source
explorer.exe
instance principale (associée au bureau) , mais pour la raison opposée. Je trouve gênant que lesexplorer.exe
processus générés ne soient pas toujours fermés lorsque toutes leurs fenêtres associées sont fermées. J'utilise le Gestionnaire des tâches pour les tuer et j'ai tendance à compter sur le fait que les instances générées sont généralement définies en haute priorité (pour une raison quelconque). Cela fonctionne très bien, mais s'il m'arrive de l'avoir réglé sur normal (pour des raisons évidentes), alors je risque de tuer accidentellement le processus principal.taskkill /f /im explorer.exe /fi "windowtitle ne N/A"
. Pour une raison quelconque, copier / coller cela dans l'invite cmd ne fonctionne pas; vous devez le taper à la main. N'a pas essayé un fichier batch.Réponses:
Approche basée sur le titre de la fenêtre
@ techie007 a suggéré de tuer le
explorer.exe
titre de la fenêtreN/A
.Commander
Comment ça fonctionne
tasklist /nh /v /fi "imagename eq explorer.exe"
répertorie verbalement tous les processus avec le nom de l'imageexplorer.exe
.for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
s'exécute
COMMAND1
. Pour chaque ligne de sortie, il définit les variables%%p
et%%q
le deuxième et le dixième "jeton" (délimité par un espace) et s'exécuteCOMMAND2
.Dans le cas de
taskkill /v
,%%p
contient maintenant le PID et%%q
le (début de) le titre de la fenêtre.if "%%q"=="N/A" taskkill /f /pid %%p
vérifie si le titre de la fenêtre estN/A
.Si c'est le cas, il termine le processus avec
taskkill
.Approche basée sur l'utilisation de la mémoire
@Syntech a souligné que cela n'est pas fiable pour l'Explorateur Windows, mais dans les programmes, le processus principal a toujours la mémoire la plus élevée.
Commander
Comment ça fonctionne
tasklist /nh /fi "imagename eq explorer.exe"
répertorie tous les processus avec un nom d'imageexplorer.exe
.sort /+65
trie la sortie précédente en commençant par le 65e caractère (où commence l'utilisation de mem).for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p
définitexplorerpid
la deuxièmetokens=2
entrée ( ) - délimitée par des espaces - de chaque ligne de la sortie deCOMMAND
, qui est le PID correspondant.Puisque
tasklist
la sortie de a été triée,explorerpid
contient le PID revendiqué ettaskkill
met fin au processus.la source
Peut-être pouvez-vous dire à Explorer d'afficher le chemin dans la barre de titre, puis utiliser le
WINDOWTITLE
filtre pour le tuer en fonction de cela?Le chemin n'apparaîtra pas dans la barre de titre d'Explorer avec les thèmes «non classiques», mais il est (maintenant) là; ce n'est tout simplement pas visible.
taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"
Vous devrez peut-être basculer temporairement vers un thème classique pour déterminer le chemin / titre de l'instance de l'Explorateur que vous souhaitez redémarrer.
Pas 100% infaillible, mais toutes les fenêtres de l'Explorateur qui n'ont pas ce chemin (partiel) dans le titre seraient au moins sûres. :)
Éditer:
Étant donné que vous souhaitez saisir celui avec le titre "N / A", vous devrez probablement utiliser un fichier de commandes pour pouvoir tokeniser les résultats d'une TASKLIST et utiliser ces résultats de jetons pour utiliser TASKKIL pour tuer par PID.
J'ai trouvé une réponse sur StackOverflow.com qui résout ce problème:
De la question Taskkill un processus sans titre? est cette réponse qui comprend cet exemple de fichier de commandes:
Vous voudrez changer la commande 'TASKLIST / V' pour qu'elle soit plus spécifique à Explorer.exe et autres, mais cela devrait vous donner un bon point de départ.
la source
tasklist /fi "imagename eq explorer.exe" /v /fo list
me dit que son titre de fenêtre est "N / A". Malheureusement, "" windowtitle eq N / A "ne fonctionne pas. Des idées?Tuez le processus avec le PID (ID de processus) le plus bas. Il aurait été démarré en premier, car les processus sont numérotés séquentiellement.
la source
tasklist | find /f "explorer"
et demander, puis simplement demander (avec une entrée utilisateur) quel est le PID le plus bas à tuer.sed
,awk
, etc.), qui assez facile à faire automatiquement. Sinon, la saisie de l'utilisateur pourrait être le meilleur choix.