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