我想检查两个端口是否正在运行。如果任何端口正在运行,则必须检查下一个端口号并在文件中写入未使用的端口号。
例如:tomcat默认端口号为8080,oracle端口号为1521。 假设输入为8080和1521。 如果8080正在运行,则必须检查8081,如果此端口也在运行,则必须检查未使用的端口号。假设未使用的端口号为8086。 并且此端口必须写入文件Tomcat_port = 8086。
同样用于检查oracle端口号。
我是脚本新手,请帮我解决这个问题。
答案 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