Я устанавливаю скрипт bat, который перечисляет все установки postgres по используемому порту (5432, 5433 и т. Д.) И позволяет пользователю выбрать установку. Я netstat в TXT, а затем читать его с для цикла для фильтрации результатов
Пока все хорошо, но проблема в том, что я не могу сузить результаты по своему вкусу. Я хотел бы, чтобы сгенерированный список был таким:
5432
5433
5434
etc
Вот что я использую:
netstat -bnf -p tcp | findstr "127.0.0.1 post" > C:\anbo.txt 2>&1
for /f "usebackq tokens=2 delims=[:]" %%p in ("C:\anbo.txt") do (echo %%p )
Это необработанный вывод "netstat":
TCP 127.0.0.1:5432 127.0.0.1:51725 ESTABLISHED
[postgres.exe]
TCP 127.0.0.1:5432 127.0.0.1:56261 ESTABLISHED
[postgres.exe]
TCP 127.0.0.1:5939 127.0.0.1:49833 ESTABLISHED
TCP 127.0.0.1:49680 127.0.0.1:54677 ESTABLISHED
TCP 127.0.0.1:49680 127.0.0.1:57445 ESTABLISHED
Это netstat, отфильтрованный по для цикла:
5432 127.0.0.1
postgres.exe
5432 127.0.0.1
postgres.exe
5939 127.0.0.1
49680 127.0.0.1
49680 127.0.0.1
Я озадачен тем, как дальше фильтровать результаты. Я генерирую netstat с "-b", потому что я хочу знать, какие порты используются каким .exe.
Возможно ли зациклить для петель? A для в пределах для , чтобы я мог еще больше сузить результаты?
Если бы я мог, например, запустить это для :
for /f "usebackq tokens=1 delims=. " %%s in ("F:\lop.txt") do (echo %%s)
Поскольку lop.txt имеет выходные данные предыдущего для , я получу:
5432
postgres
5432
postgres
5939
49680
49680
Что было бы намного ближе к тому, что я хочу. Мне просто нужно «как-то» отфильтровать результаты, которые не имеют «postgres» в строке под ними, и найти способ игнорировать повторяющиеся значения, например, не перечислять два 5432. Есть идеи, как мне это сделать?