я пытаюсь найти способ получить свой собственный PID из командной строки (для последующего использования в скриптах bat), пока единственным полезным способом, который я нашел, было использование getpids.exe отсюда: http://www.scheibli.com/ projects / getpids / index.html, но я ищу команду, «встроенную» в windows
редактировать: я ищу способ «пуленепробиваемый» - никаких предположений о том, что мой процесс является единственным cmd.exe или что-то еще
microseconds
, а не 1/100 секунды, как в% времени%) будет более надежным в этом случае:wmic os get LocalDateTime
(YearMonthDayHourMinuteSecond.Microsecond + Timezone). Если планировщик не может запустить две вещи в одну и ту же микросекунду ...Я считаю, что следующее является пуленепробиваемым, при условии, что пользователь имеет доступ к WMIC и TEMP указывает на действительный путь, где у пользователя есть права на запись. Это конечный результат совместной работы на http://www.dostips.com/forum/viewtopic.php?f=3&t=6133 .
Сценарий устанавливает эксклюзивную блокировку для временного файла, который включает текущее время в имя. Столкновение может быть только в том случае, если два одинаковых пакетных процесса пытаются получить PID в течение одного и того же интервала времени 0,01 секунды, и в этом случае только один будет успешным.
Любой сбойный процесс будет многократно возвращаться назад и повторять попытку с новым путем к файлу блокировки, пока он не будет успешным.
Полный путь к файлу блокировки преобразуется в уникальный идентификатор, который можно использовать в запросе WMIC. WMIC запускается в команде FOR / F, что означает, что он выполняется в дочернем процессе cmd.exe. Вот почему ParentProcessID процесса cmd.exe извлекается.
источник
Расширяя ответ Тони Рота:
Использование фильтра WINDOWTITLE позволяет избежать использования канала, поэтому вы можете поместить его в цикл for и назначить его переменной с помощью SET, если хотите:
Удаление
/v
делает это быстрее, и/NH
избавляется от строки заголовка. Вам нужен подстановочный знак после,"uniqueTitle"
потому что заголовок окна на самом деле содержит текущую команду (таким образом, он будет продолжаться и включаться, если вы попытаетесь полностью соответствовать ей).источник
Использование PowerShell + WMI:
источник
pwsh -noprofile -c "(Get-Process -Id $PID).Parent.Id"
источник
если вы знаете, что запущен только один cmd.exe, PID можно получить следующим образом:
источник
Это должно сделать трюк:
источник
Если вы хотите найти PID imagename "notepad.exe", то вам подойдет следующий код:
источник
Если у вас есть Windows 2003 Resource Kit, протолкните его через qgrep, чтобы получить нужную строку. Затем вы можете извлечь pid отсюда (это предполагает, что у вас запущен только один cmd за раз),
источник
Взгляните на этот маленький трюк . Он устанавливает для заголовка cmd специальное значение, а затем использует список задач для его поиска. изобретательный
\\ Greg
источник
ЭТО КОРОТКИЙ СПОСОБ ПОЛУЧИТЬ ID ПРОЦЕССА ДЛЯ ОТКРЫТОГО CMD
источник
Этот ответ даст вам ТОЛЬКО идентификатор процесса, и ни один из дополнительных материалов, включенных в верхний ответ.
Объяснение:
- не будет PID для cmd.exe, который больше 18100, поэтому проверьте, если PID2 больше, чем 8100, чтобы мы знали, является ли это 4-значное или 5-значное число
случай 1: 5-значный PID, такой как 17504, имеет значение PID1 17504 и значение PID2 1750, поэтому мы используем PID1
Случай 2: 4-значный PID, такой как 8205, имеет значение PID1 8205 "и значение PID2 8205, поэтому мы используем PID2
случай 3: 4-значный PID, такой как 4352, имеет значение PID1 4352 "и значение PID2 4352, поэтому мы используем PID2
источник