Odpowiedzi:
Wmic process where (Name like '%CHP%') get caption, name, commandline, ProcessId | more
prawdziwa próbka:
Wmic process where (Name like '%ie%') get caption, name, commandline, ProcessId | more
Wydajność:
Wmic process get ProcessId
wyodrębnij tylko processId do zmiennej z wyniku zapytania:
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%
Wydajność:
ProcessId = 2372
Jest to całkiem proste w PowerShell. Start-Process notepad.exe -PassThru
uruchomi Notatnik i wróci:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
45 6 1672 4240 61 0.02 9212 notepad
Stamtąd można go używać jak obiektu, przechowując dane wyjściowe ( $notepad = Start-process notepad.exe -PassThru
i wtedy $notepad.ID
) i dokończ wszystkie skrypty, które robiłeś.
Powrót do skryptu wsadowego (jeśli jest to absolutnie konieczne) jest trochę skomplikowany. Jeśli całkowicie utkniesz w używaniu pliku wsadowego, prawdopodobnie najłatwiej byłoby napisać skrypt PowerShell, który zapisuje odpowiednie informacje do pliku lub klucza rejestru, wywołać skrypt PowerShell z pliku wsadowego, a następnie przeczytać plik lub reg klucz później w skrypcie wsadowym.
Jeśli nie chcesz w ogóle dotykać PowerShell, będziesz musiał skorzystać z WMIC lub listy zadań, aby znaleźć proces po jego utworzeniu.
Inny sposób :: Możesz utworzyć plik wsadowy i umieścić następujący kod w pliku wsadowym. Najpierw uruchom komendę netstat, aby uzyskać processId dla portu 9797. Następnie ustaw ją na zmienną.
@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
tasklist
.