Encontrando uma porta livre com lote

3

Como posso encontrar uma porta livre com um arquivo de lote?
Eu tentei executar um loop e usando o netstat -o -n -a irá incrementar uma variável até que a porta não seja encontrada na lista netstat

Mas também não tenho certeza se essa é a melhor maneira de encontrar uma porta livre.

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%
    
por Navy Seal 08.10.2013 / 13:12

2 respostas

3

Você precisará alterar o seu

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

em

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

O find "LISTENING" limita sua pesquisa a apenas portas de escuta recebidas e você precisa do espaço depois da lat % , porque senão você igualará :8085 também.

Você também teve alguns outros erros no seu .bat.

  • Na declaração if, você precisava agrupar o %ERRORLEVEL% em torno de " .
  • Você precisa do ( na mesma linha que a instrução if.
  • Eu mudei o eco de% ERRORLEVEL% para ecoar o% startPort%.

Aqui está um correto:

@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%
    
por 08.10.2013 / 13:34
1

Normalmente, o comando net stat do windows ajudará você a encontrar estatísticas de porta

Você pode tentar como isso usando instruções condicionais

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

Tags