Вот команда, с которой можно начать:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Если вы уверены в своем пакетном файле, удалите @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Обратите внимание, что вам может понадобитьсяизмените это немного для разных ОС.Например, в Windows 7 вам может потребоваться tokens=5
вместо tokens=4
.
Как это работает
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Это позволяет вам выполнить command
,и цикл по выходным данным.Каждая строка будет вставлена в %variable
и может быть расширена в otherCommand
столько раз, сколько вы хотите, где вам угодно.%variable
при фактическом использовании может иметь только однобуквенное имя, например, %V
.
"tokens=4 delims= "
Это позволяет разделить каждую строку на пробел, взять 4-й фрагмент в этой строке и заполнитьэто в %variable
(в нашем случае, %%P
).delims
выглядит пустым, но это дополнительное пространство на самом деле важно.
netstat -a -n -o
Просто запустите его и узнайте.Согласно справке командной строки, она «Отображает все подключения и прослушивающие порты», «Отображает адреса и номера портов в числовой форме.» И «Отображает идентификатор процесса-владельца, связанный с каждым подключением».Я просто использовал эти опции, так как кто-то еще предложил это, и это сработало:)
^|
Это берет выходные данные первой команды или программы (netstat
) и передает их во вторую командную программу(findstr
).Если бы вы использовали это непосредственно в командной строке, а не внутри командной строки, вы бы использовали |
вместо ^|
.
findstr :8080
Это фильтрует все выходные данные, которые передаются в него, возвращаятолько строки, содержащие :8080
.
TaskKill.exe /PID <value>
Это убивает запущенную задачу, используя идентификатор процесса.
%%P instead of %P
Это требуется в пакетных файлах.Если бы вы сделали это в командной строке, вы бы использовали %P
вместо.