使用bat文件检查Windows中的端口号

时间:2014-03-03 06:57:46

标签: batch-file

我想检查两个端口是否正在运行。如果任何端口正在运行,则必须检查下一个端口号并在文件中写入未使用的端口号。

例如:tomcat默认端口号为8080,oracle端口号为1521。 假设输入为8080和1521。 如果8080正在运行,则必须检查8081,如果此端口也在运行,则必须检查未使用的端口号。假设未使用的端口号为8086。 并且此端口必须写入文件Tomcat_port = 8086。

同样用于检查oracle端口号。

我是脚本新手,请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

批量scritping中有一个命令,可以让您确定端口是否已被使用。

    netstat -o -n -a | findstr (search criteria)

之后,会出现错误“ERRORLEVEL”,告诉您是否达到了您的标准。 如果一切正常,则ERRORLEVEL等于0,否则大于0。

假设在下面找到一个询问您起始端口的脚本,并在有可用端口时自动停止。它还将该端口写入名为Availablebles.txt

的文件中
     @echo off
     set /p port=Type the beginning port  
     set /a BPort=%port%


     setlocal ENABLEDELAYEDEXPANSION
     echo Available ports >> Availables.txt 
     set /a Maxport = 65535 - BPort

     for /l %%X in (0,1,!Maxport!) do ( 
     set /a tempo=BPort+X
     echo Current port=!tempo!   
     netstat -o -n -a | findstr :!tempo! 
     if !ERRORLEVEL! equ 0 (@echo "Port available") ELSE (@echo Port : !tempo! is   Available sir ! >> Availables.txt 
     goto eof) 
     set /a BPort=BPort+1 )

     echo There is any port available for you sir :(

     :eof
     echo Available port found 
     echo Finish processing
     pause 

告诉我它是否适用于您或任何问题。

答案 1 :(得分:0)

此代码定义了一个子例程/函数(findFirstAvailablePort)来执行工作或从起始指示的数字中搜索第一个可用的TCP端口。该值在变量中返回(也在子例程调用中传递)。

然后调用此函数两次以从8080和1521开始检索可用端口。然后将检索到的数据回显到控制台。

@echo off
    setlocal enableextensions

    :: search for available ports
    call :findFirstAvailablePort 8080 tomcatPort
    call :findFirstAvailablePort 1521 oraclePort

    :: echo the retrieved data
    echo Tomcat_port=%tomcatPort%
    echo Oracle_port=%oraclePort%

    endlocal
    exit /B


:findFirstAvailablePort startingPort returnVariable
    setlocal enableextensions
    :: Generate a list of the open ports and save in temporary file
    set "tempFile=%temp%\%~nx0.tmp"
    ((@for /f "tokens=2" %%a in ('netstat -an -p tcp'
     ) do @for /f "tokens=1,2 delims=]" %%b in ("%%a"
     ) do @if "%%c"=="" (@echo(x%%b) else (@echo(%%c)
    )|@for /f "tokens=2 delims=: " %%d in ('more') do @echo($%%d$) > "%tempFile%"

    :: Test temporary file for next available port
    (break|@for /l %%p in (%~1 1 65535) do @(
        find "$%%p$" "%tempFile%" >nul || exit %%p
        if %%p==65535 exit 0
    ))
    set "port=%errorlevel%"

    :: clean and exit returning port
    endlocal & del /q "%tempFile%" 2>nul & set "%~2=%port%" & exit /b

该功能的工作分为两部分。

第一部分读取netstat命令的输出并拆分该行以检索打开端口列表并生成要分析的临时文件。

第二次迭代检查端口号,查找临时文件,搜索无法找到的第一个端口号。

答案 2 :(得分:0)

操作系统:Windows 7 - 64位

此批处理脚本找到 UNUSED UNPRIVILEGED PORT ,并使用它从USB闪存驱动器使用便携式谷歌浏览器网页浏览器打开本地Web应用程序(Portable R Shiny App)。在上面的weblink中,作者建议创建单独的runShinyApp.R和run.bat被压缩为单个批处理文件,如下所示。

@echo off
    title My Shiny APP

    setlocal ENABLEDELAYEDEXPANSION

    for /l %%X in (1025,1,65535) do (   
    netstat -o -n -a | findstr :%%X 
    if !ERRORLEVEL! neq 0 ( set avail_port=%%X
    goto eof) 
    )

    :eof
    SET ROPTS=--no-save --no-environ --no-init-file --no-restore --no-Rconsole

    start "" ".\GoogleChromePortable\App/Chrome-bin/chrome.exe" "http://localhost:!avail_port!/"

    R-Portable\App\R-Portable\bin\Rscript.exe %ROPTS% -e "require(methods); shiny::runApp('./shiny', launch.browser = FALSE, port = !avail_port!)" 1> ShinyAppOut.log 2> ShinyAppMsg.log