使用批处理查找空闲端口

使用批处理查找空闲端口

如何使用批处理文件查找空闲端口?
我尝试运行一个循环并使用 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%

答案1

你需要改变你的

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%

答案2

通常,Windows 的 net stat 命令可以帮助您查找端口统计信息

你可以尝试使用条件语句

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

相关内容