2014-03-03 2 views
0

두 포트가 실행 중인지 확인하고 싶습니다. 포트가 실행중인 경우 다음 포트 번호를 확인하고 사용하지 않은 포트 번호를 파일.박쥐 파일을 사용하여 Windows에서 포트 번호 확인

예를 들어 : 바람둥이 기본 포트 번호는 8080와 오라클 포트이 포트는 또한 실행하면 8080이 8081을 확인해야하고 년의 경우 실행중인 경우 수 1521 입력이 8080과 1521 에서의 경우를 가정하자 사용하지 않은 포트 번호를 확인해야합니다. 사용하지 않은 포트 번호는 8086입니다. 그리고이 포트는 Tomcat_port = 8086 파일에 작성해야합니다.

오라클 포트 번호도 확인하는 것과 같습니다.

나는이 문제를 해결하는 데 도움이되는 스크립팅을 처음 사용합니다.

답변

0

포트가 이미 사용되었는지 여부를 결정할 수있는 명령을 일괄 스크립팅으로 제공합니다.

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

그 다음에 "ERRORLEVEL"오류가 발생하여 기준에 도달했는지 여부를 알려줍니다. 모든 것이 제대로 작동하면 ERRORLEVEL은 0이고 그렇지 않은 경우 0보다 큽니다.

시작 포트를 묻는 스크립트를 찾아 사용 가능한 포트가 있으면 자동으로 중지한다고 가정합니다. 또한이 포트를 Availables.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 

당신이나 다른 질문에 효과가 있는지 알려주십시오.

0

이 코드는 작업을 수행하거나 표시된 시작 번호에서 첫 번째 사용 가능한 TCP 포트를 검색하는 서브 루틴/함수 (findFirstAvailablePort)를 정의합니다. 값은 변수에 반환됩니다 (서브 루틴 호출에서도 전달됨).

그러면이 함수를 두 번 호출하여 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 명령의 출력을 읽고 행을 분할하여 열려있는 포트 목록을 검색하고 분석 할 임시 파일을 생성합니다.

두 번째는 찾을 수없는 첫 번째 포트 번호를 검색하는 임시 파일과 비교하여 포트 번호를 검사합니다.

0

OS : 윈도우 7-64 비트

이 배치 스크립트는 사용하지 않은 권한이없는 PORT를 발견하고 USB 플래시 드라이브에서 휴대용 구글 크롬 웹 브라우저를 사용하여 로컬 웹 응용 프로그램 (Portable R Shiny App를) 열을 사용합니다. 위의 웹 링크에서 별도의 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 
관련 문제