Finding a free port with batch

How can I find a free port with a batch file?
I tried to run a loop and using the netstat -o -n -a it will increment a variable until the port is not found in the netstat list

But I'm also not sure if this is the best way to find a free port.

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%
3

2 Answers

You'll need to change your

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

in

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

The find "LISTENING" limits your search to only incoming listening ports and you need the space after the lat % because else you'll match :8085 too.

You also had some other errors in your .bat.

  • In the if statement you needed to wrap the %ERRORLEVEL% around ".
  • You need the ( on the same line as the if statement.
  • I changed the echo from %ERRORLEVEL% to echo the %startPort%.

Here is a correct working one:

@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%
2

Usually net stat command of windows would help you to find port statistics

You could try like this using conditional statements

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like