Добавление аргумента -b
к команде netstat
также даст имя исполняемого файла с открытым портом.
netstat -aonb
Обновление
Невозможно соединить две команды вместе, потому что для этого вторая команда должна принять в стандартном вводе результаты первой команды в стандартном выводе.В вашем примере это не тот случай.
Одна из возможностей для такого рода действий заключается в использовании команды for /f
, и она может маркировать выходные данные команды, чтобы назначать биты вывода переменным, которыезатем может быть использован в другой команде.Проблема здесь заключается в том, что символ канала нельзя использовать в команде, выходные данные которой обрабатываются командой for
.Вы можете делать то, что хотите, только в одной строке, хотя и довольно страшной:
for /f "tokens=2,5" %i in ('netstat -aon') do @(if "%i"=="0.0.0.0:80" (wmic PROCESS get Caption,ProcessId | findstr "%j"))
Эта строка выполняет команду netstat -aon
, а затем для каждой строки вывода выполняет следующее:
- Разбивает строку на токены, используя пробелы в качестве разделителя
- Назначает токены 2 и 5 переменным% i (адрес для регистрации: порт) и% j (идентификатор процесса)
- Проверяет, является ли
%i
строка для порта, который вы ищете - Если это так, запускает команду wmic и фильтрует вывод на основе% j
Другое обновление
Я только что обнаружил, что в команде for
можно использовать команду по каналу.Итак, вот несколько более простой однострочный текст, который в основном делает именно то, что вы просите:
for /f "usebackq tokens=5" %i in (`"netstat -aon | findstr "0.0:80""`) do @wmic PROCESS get Caption,ProcessId | findstr "%i"