6

Я ищу что-то вроде chp.exe, он может запустить команду и возвращает свой pid. Я не могу использовать CHP.EXE, потому что в некоторых антивирусах он отображается как зараженный файл.

Спасибо

4 ответа4

4
Wmic process where (Name like '%CHP%') get caption, name, commandline, ProcessId | more

реальный образец:

Wmic process where (Name like '%ie%') get caption, name, commandline, ProcessId | more

Выход:

ProcessId, где как имя Wmic Far менеджер

Wmic process get ProcessId

извлеките только processId в переменную из результатов запроса:

ProcID.cmd:

@ECHO OFF                                                                              
FOR /F %%T IN ('Wmic process where^(Name^="explorer.exe"^)get ProcessId^|more +1') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId = %ProcessId%                                                           

Выход:

ProcessId = 2372    
2

Это довольно просто сделать в PowerShell. Start-Process notepad.exe -PassThru запустит Блокнот и вернет:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName                                                                                                                              
-------  ------    -----      ----- -----   ------     -- -----------                                                                                                                              
     45       6     1672       4240    61     0.02   9212 notepad   

Оттуда вы можете использовать его как объект, сохраняя вывод ($notepad = Start-process notepad.exe -PassThru и затем $notepad.ID) и закончите все сценарии, которые вы делали с ним.

Возвращение его к пакетному сценарию (если это абсолютно необходимо) немного сложнее. Если вы абсолютно застряли в использовании пакетного файла, возможно, было бы проще всего написать сценарий PowerShell, который записывает соответствующую информацию в файл или раздел реестра, вызвать сценарий PowerShell из пакетного файла, а затем прочитать файл или рег. ключ позже в пакетном скрипте.

Если вы вообще не хотите трогать PowerShell, вам придется прибегнуть к WMIC или списку задач, чтобы найти процесс после его создания.

0

Вы можете запустить программу и затем выполнить эту команду, заменив firefox именем процесса, которое вы хотите:

for /f "tokens=2" %a in ('tasklist /nh /fi "imagename eq firefox.exe"') do echo %a

это будет выводить pid исключительно, в моем случае, вывод 5540

0

Другой способ :: Вы можете создать командный файл и поместить следующий код в командный файл. Его первая команда netstat запускает, чтобы получить processId для порта 9797. И затем установите его в переменную.

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId = %ProcessId%
PAUSE

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .