Eu tenho um arquivo em lotes que altera alguns arquivos do Registro e, em seguida, reinicia o explorer.exe para que eles entrem em vigor. Estou usando os comandos
taskkill /f /im explorer.exe
explorer.exe
Isso, claro, mata todos os processos explorer.exe, incluindo as janelas do explorador que tenho abertas.
(Obviamente, estou usando a opção de Launch folder windows in a separate process
.)
Existe alguma maneira que eu possa determinar qual instância do explorer.exe é o principal e apenas matar isso?
windows
windows-explorer
process
batch-file
HodofHod
fonte
fonte
explorer.exe
exemplo também, mas pela razão oposta. Eu acho irritante que tenha desovadoexplorer.exe
os processos nem sempre são encerrados quando todas as janelas associadas são fechadas. Eu uso o Gerenciador de Tarefas para matá-los e tendem a confiar no fato de que as instâncias geradas geralmente são definidas como de alta prioridade (por algum motivo). Isso funciona bem, mas se por acaso eu configurá-lo para o normal (por razões óbvias), então corro o risco de matar acidentalmente o processo primário.taskkill /f /im explorer.exe /fi "windowtitle ne N/A"
. Por alguma razão, copiar / colar isso no prompt do cmd não funciona; você tem que digitá-lo manualmente. Não tentei um arquivo em lotes.Respostas:
Abordagem baseada em título de janela
@ techie007 sugerido matando o
explorer.exe
com título da janelaN/A
.Comando
Como funciona
tasklist /nh /v /fi "imagename eq explorer.exe"
lista com verbosidade todos os processos com nome de imagemexplorer.exe
.for /f "tokens=2,10" %%p in ('COMMAND1') do COMMAND2
executa
COMMAND1
. Para cada linha de saída, define as variáveis%%p
e%%q
para o segundo e décimo "token" (delimitado pelo espaço) e executaCOMMAND2
.No caso de
taskkill /v
,%%p
agora detém o PID e%%q
o (início de) o título da janela.if "%%q"=="N/A" taskkill /f /pid %%p
verifica se o título da janela éN/A
.Se assim for, encerra o processo com
taskkill
.Abordagem baseada no uso de memória
@Syntech apontou que isso não é confiável para o Windows Explorer, mas nos programas, o processo principal sempre tem o maior uso de memória.
Comando
Como funciona
tasklist /nh /fi "imagename eq explorer.exe"
lista todos os processos com nome de imagemexplorer.exe
.sort /+65
classifica a saída anterior, começando com o 65º caractere (onde começa o uso de mem).for /f "tokens=2" %%p in ('COMMAND') do @set explorerpid=%%p
Conjuntosexplorerpid
para o segundo (tokens=2
) entrada - delimitada por espaços - de cada linha da saída deCOMMAND
, que é o PID correspondente.Desde a
tasklist
a saída foi classificada,explorerpid
detém o PID reivindicado etaskkill
encerra o processo.fonte
Talvez você possa dizer ao Explorer para mostrar o caminho na barra de título, e então usar o
WINDOWTITLE
filtrar para matá-lo com base nisso?O caminho não será exibido na barra de título do Explorer com os temas "não clássicos", mas está (agora) lá; simplesmente não é visível.
taskkill /F /FI "WINDOWTITLE eq C:\PathToThing\RunningInExplorer\ToRestart*"
Talvez seja necessário alternar temporariamente para um tema clássico para determinar qual é o caminho / título da instância do Explorer que você deseja reiniciar.
Não é 100% à prova de erros, mas qualquer janela do Explorer que não tenha esse caminho (parcial) no título seria pelo menos segura. :)
editar:
Uma vez que você quer pegar o título "N / A", você provavelmente terá que usar um arquivo em lotes para que você possa converter os resultados de um TASKLIST e usar esses resultados de token para usar TASKKIL para matar por PID.
Eu encontrei uma resposta para StackOverflow.com que aborda isso:
Da pergunta Taskkill um processo sem título? é esta resposta que inclui este arquivo de lote de exemplo:
Você vai querer mudar o comando 'TASKLIST / V' para ser mais específico do Explorer.exe e tal, mas deve ser um bom ponto de partida.
fonte
tasklist /fi "imagename eq explorer.exe" /v /fo list
me diz que o seu windowtitle é "N / A". Infelizmente, `" windowtitle eq N / A "não funciona. Alguma ideia?Mate o processo com o PID mais baixo (ID do processo). Teria sido iniciado primeiro, pois os processos são numerados sequencialmente.
fonte
tasklist | find /f "explorer"
e pergunte então é só pedir (com entrada do usuário) qual é o menor PID para matar.sed
,awk
, etc.), isso muito fácil de fazer automaticamente. Caso contrário, a entrada do usuário pode ser a melhor escolha.