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%