Estou tentando encontrar uma maneira de obter meu próprio PID em um prompt de comando (para uso posterior em scripts bat) até agora, a única maneira útil que encontrei foi usar o getpids.exe a partir daqui: http://www.scheibli.com/ projects / getpids / index.html, mas estou procurando por um comando "incorporado" no Windows
edit: estou procurando uma maneira "à prova de balas" - sem suposições sobre o meu processo ser o único cmd.exe ou algo assim
microseconds
, em vez de 1/100 segundos como em% time%), seria mais confiável neste caso:wmic os get LocalDateTime
(YearMonthDayHourMinuteSecond.Microsecond + Timezone). A menos que o planejador seja capaz de executar duas coisas exatamente no mesmo microssegundo ...Eu acredito que o seguinte é à prova de balas, desde que o usuário tenha acesso aos pontos WMIC e TEMP para um caminho válido em que o usuário tenha privilégios de gravação. Este é o resultado final de alguns trabalhos colaborativos em http://www.dostips.com/forum/viewtopic.php?f=3&t=6133 .
O script estabelece um bloqueio exclusivo em um arquivo temporário que incorpora a hora atual no nome. Só pode haver uma colisão se dois processos em lote nomeados tentarem obter o PID dentro do mesmo intervalo de 0,01 segundo, caso em que apenas um será bem-sucedido.
Qualquer processo que falhar será repetidamente repetido e tentará novamente com um novo caminho de arquivo de bloqueio até que seja bem-sucedido.
O caminho completo para o arquivo de bloqueio é transformado em um ID exclusivo que pode ser usado na consulta WMIC. O WMIC é executado dentro de um comando FOR / F, o que significa que está sendo executado em um processo filho cmd.exe. É por isso que o ParentProcessID do processo cmd.exe é recuperado.
fonte
Expandindo a resposta de Tony Roth:
O uso do filtro WINDOWTITLE evita o pipe, para que você possa colocá-lo em um loop for e atribuí-lo a uma variável com SET, se desejar:
Removendo o
/v
torna mais rápido, e/NH
se livra da linha de cabeçalho. Você precisa do curinga depois"uniqueTitle"
porque o título da janela realmente contém o comando atual (portanto, ele continuaria se você tentasse correspondê-lo completamente).fonte
Usando o PowerShell + WMI:
fonte
pwsh -noprofile -c "(Get-Process -Id $PID).Parent.Id"
fonte
se você sabe que há apenas um cmd.exe em execução, é possível obter o PID desta maneira:
fonte
Isso deve fazer o truque:
fonte
Se você deseja encontrar o PID do nome da imagem "notepad.exe", o seguinte código funcionará para você:
fonte
Se você possui o kit de recursos do Windows 2003, passe-o pelo qgrep para obter a linha desejada. Você pode extrair o pid daqui (isso pressupõe que você tenha apenas um cmd em execução por vez),
fonte
Dê uma olhada neste pequeno truque de lote . Ele define o título de cmd como um valor especial e, em seguida, usa a lista de tarefas para encontrá-lo. Inventivo
\\ Greg
fonte
Esta é uma maneira curta de obter o ID do processo para CMD aberto
fonte
Esta resposta fornecerá APENAS o ID do processo e nenhum dos itens extras incluídos na resposta principal.
Explicação:
-não haverá um PID para cmd.exe maior que 18100, portanto, verifique se o PID2 é maior que 8100 para saber se é um número de 4 ou 5 dígitos
caso 1: um PID de 5 dígitos como 17504 possui um PID1 val 17504 e um PID2 val 1750, portanto, usamos PID1
caso 2: um PID de 4 dígitos, como 8205, tem um valor PID1 de 8205 "e um valor PID2 de 8205, então usamos o PID2
caso 3: um PID de 4 dígitos, como 4352, tem um valor PID1 de 4352 "e um valor PID2 de 4352, por isso usamos o PID2
fonte