3

Как мне найти свободный порт с командным файлом?
Я попытался запустить цикл и с помощью netstat -o -n -a он будет увеличивать переменную до тех пор, пока порт не будет найден в списке netstat

Но я также не уверен, что это лучший способ найти свободный порт.

set freePort=
set startPort=80

:SEARCHPORT 
netstat -o -n -a | findstr ":%startPort%" 
if %ERRORLEVEL% equ 0 
( echo "port unavailable %ERRORLEVEL%"
  set /a startPort +=1
  GOTO :SEARCHPORT 
) ELSE (
    echo "port available %ERRORLEVEL%"
    set freePort=%startPort%
    GOTO :FOUNDPORT 
   )

:FOUNDPORT
echo free %freePort%

2 ответа2

3

Вам нужно будет изменить свой

netstat -o -n -a | findstr ":%startPort%"

в

netstat -o -n -a | find "LISTENING" | find ":%startPort% "

find "LISTENING" ограничивает ваш поиск только входящими прослушивающими портами, и вам нужно пространство после лат % потому что в противном случае вы будете соответствовать :8085 тоже.

У вас также были некоторые другие ошибки в вашем .bat.

  • В операторе if вам нужно было обернуть %ERRORLEVEL% вокруг " .
  • Вам нужно ( в той же строке, что и оператор if.
  • Я изменил эхо с% ERRORLEVEL% на эхо% startPort%.

Вот правильный рабочий:

@echo off
set freePort=
set startPort=80

:SEARCHPORT
netstat -o -n -a | find "LISTENING" | find ":%startPort% " > NUL
if "%ERRORLEVEL%" equ "0" (
  echo "port unavailable %startPort%"
  set /a startPort +=1
  GOTO :SEARCHPORT
) ELSE (
  echo "port available %startPort%"
  set freePort=%startPort%
  GOTO :FOUNDPORT
)

:FOUNDPORT
echo free %freePort%
1

Обычно команда net stat для windows поможет вам найти статистику портов

Вы можете попробовать это, используя условные выражения

@echo off
netstat -o -n -a | findstr ZXCZXCZCZX  
if %ERRORLEVEL% equ 0
(@echo "port is available") ELSE (@echo "port is unavailable")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .