从批处理文件中检查未监听的端口

Checking for Not Listening Ports from Batch File

我正在编写一个批处理文件来自动执行某些冗余任务。在这个过程中,我需要找到一个没有监听的端口,以便我可以使用它来安装一些服务。

我目前的测试代码是:

@echo OFF
:getPort
Set /P oPort=Enter an open port (not listening) (eg: 9335)
echo %oPort%
for /f "delims=" %%a in ('netstat -an |find /i "%oPort%"') do (
    call set concat=%%concat%%%%a
    )
echo %concat%
IF [%concat%] != [] 
echo %oPort% is already in use.
GOTO getPort

它抛出错误| was unexpected at this time.

我想在代码中做的是:

  1. 从用户那里获取端口号
  2. 运行 命令例如:netstat -an | find /i 9225 并将输出值存储在变量中
  3. 如果变量不为空,则表示端口正在侦听,因此我需要提示用户输入另一个端口。

任何指导,请。

我建议不要使用 for 循环来提取输出,而是将其重定向到一个文件中并执行该操作。

@echo OFF
:getPort
Set /P oPort=Enter an open port (not listening) (eg: 9335)
echo %oPort%
netstat -an |find /i "%oPort%"' > temp.tmp
set /p concat=<temp.tmp
del temp.tmp
echo %concat%
IF "%concat%" NEQ "" (
  echo %oPort% is already in use.
  GOTO getPort
)
echo %oPort% is not in use.
REM Not sure if you want to exit or continue
goto getport

哪个应该有效。

netstat -an | findstr /r /c:"^  [TU][CD]P  *[^ ]*:%oPort% " >nul && goto :getPort

不需要for命令。只是测试是否可以找到该值。如果可以找到请求另一个端口。