Uruchom proces i zwróć jego PID (jako CHP.EXE) dla pliku wsadowego

6

Szukam czegoś takiego jak chp.exe, może uruchomić polecenie i zwrócić pid. Nie mogę użyć CHP.EXE, ponieważ wydaje się, że został zgłoszony jako zainfekowany plik w niektórych programach antywirusowych.

Dzięki

Tobia
źródło
1
Możesz uruchomić program i przeanalizować wynik tasklist.
Karan

Odpowiedzi:

4
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ść:

ProcessId where like name Wmic Far manager

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    
STTR
źródło
każda sugestia, aby wyodrębnić tylko processId do zmiennej z wyniku zapytania?
Tobia
@Tobia zobacz ponownie
STTR
2

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.

Tanner Faulkner
źródło
0

możesz uruchomić program, a następnie wydać to polecenie, zastępując je firefox z żądaną nazwą procesu:

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

wyświetli pid tylko w moim przypadku wyjście jest 5540

w17t
źródło
0

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
flopcoder
źródło
Proszę wyjaśniać co to robi.
Scott