본문 바로가기

개발

[window] batch 파일 만들기

 

batch 파일은 윈도우에서 실행할 프로그램들을 모아놓은 스크립트입니다.

 

이 스크립트에는 cmd 창에서 하나하나 실행하던 command들을 모아 놓았다고 생각하시면됩니다.

 

일단 tcping을 사용하기위해서는

https://www.elifulkerson.com/projects/tcping.php 로 들어가서 tcping.exe 을 다운받으면 됩니다

다운받은 tcping.exe 파일을 C드라이브 -> WINDOWS -> system32 에 붙여넣어주세요.

 

사용하는 기능은  

 - if ~ else if ~ else  : 조건에 따라 움직임

 - goto :  만들어 놓은 메소드를 실행

 - set : 변수 선언

 - /p  : 사용자로부터 input 받음

 - taskkill /f /im 이름 : 일치하는 이름의 프로세스 죽임

 - cd : 경로이동

 - timeout 초 : 초 동안 대기함 ( 대기하는동안 입력하는것이 있으면 넘어감 )

 - echo hi : 화면에 hi라고 표시됨 ( echo. 을 할경우 한줄 넘어감 )

 - ping 아이피 : 아이피로 ping test wㅣㄴ행

 - start /d 경로 명령어:  입력한 경로로 새로운 cmd창을 만든 후 명령어를 실행함

 -  for /f :  실행 시킨 명령어의 결과를 한줄씩 읽어옴

 - findstr 문자 : netstat or tasklist 등 명령어를 사용하여 리스트를 읽어올때 입력한 문자와 일치하는 부분만 가져옴

 - @echo off : 화면에 경로 표시되는 부분 지움

 - tcping 아이피 포트 : 아이피의 포트로 요청을 하여 체크할 수 있음

 - ::  or rem : 주석

 - :HI  : HI 라는 메소드  , goto HI 로 실행시킬수 있음

 - pause : 강제로 대기하게끔 만듬  

 - docker-compose up -d : docker-compose.yml 파일을 백그라운드로 실행시킴

 - docker-compose down : docker-compose.yml 파일을 종료함

 ** 배치파일 만들때 주의사항 : 기존에 알고있던 코드 로직과 살짝 다릅니다..( 아래 예시 참조 ) 

 

위 예시를 보시면 echo 를 사용하여 콘솔에 보일 텍스트를 적어줬습니다

그리고 set /p choice=  에서 사용자의 입력을 대기합니다

사용자가 1을 입력하면 if문에 따라서 goto INIT 으로 이동을하는데 아래애 : INIT이 있는걸 볼수 있습니다.

그리고 echo END가 실행되고 pause 명령어에 따라서 콘솔창에서 계속하려면 아무 키나 누르십시오 . . . 가 표시되는 걸 볼 수 있습니다.

 

근데 .. 중간에 echo 123이 콘솔창에 표시안되는거 보이시죠..     이 점을 꼭 기억하고 작성하셔야 합니다.

 

 

 

 

@ECHO off

::동작 순서  1을 입력할 경우 
:: 1. 실행중인 python 모두 종료
:: 2. 실행중인 program1.exe ,program2.exe 종료
:: 3. docker-compose down
:: 4. docker-compose up 
:: 5. program2.exe , program1.exe 실행
:: 6. python 2개 파일 실행 
:: 주의 사항 debug에서 tcping 을 사용하려면 tcping.exe 파일을  C:\Windows\System32 에 붙여넣기 해야 가능하다. 

 

::동작순서 2를 입력한 경우

:: 도커로 실행한 3306(mysql ) 와  3301~3308port로 tcping 을 요청한다

:: 요청 결과가 정상인 경우 1 successful, 0 failed.  (0.00% fail)

:: 요청 결과가 비정상인 경우 0 successful, 1 failed.  (100.00% fail) 

:: 위와 같이 나오는데  1 인경우 success 를 그밖에는 fail을 표시

:: for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3306 ^| findstr success') do set result=%%a   코드를 해석하자면 delims 는 구분자 , tokens 는 구분자 기준 몇번째 값인지를 판단하다 .%%a IN 명령문 ==> 실행한 값을 %%a 에 담는다 ,  do => 실행 결과  , set result=%%a 

echo.
echo.

:LOOP
echo  Please input keyboard number    ( 0= QUIT , 1 = START  2 = debug)
set /p choice=


if %choice%==1 (
goto INIT
) else if %choice%==2 (
goto DEBUG
) else (
goto END
)

::init 셋팅 ( docker-compose , python , electron 모두 종료 )
:INIT
echo init setting default 
taskkill /f /im python.exe
taskkill /f /im program2.exe
taskkill /f /im program1.exe
cd C:\docker_compose
docker-compose down
timeout 5
echo init setting completed ( all system stop ) 
goto START

::도커 실행 
:START
echo docker start 
docker-compose up -d
echo docker start completed
timeout 5
echo.
goto ORDER



::operator view 실행
:ORDER
echo operator start
cd C:\dist_electron\
"program1.exe"
echo operator completed
timeout 5
echo.
goto CLIENT

::client view 실행 
:CLIENT
echo client start
cd C:\dist_electron\
"program2.exe"
echo client completed
timeout 5
echo.
goto ROBOT



::robot 실행 
:ROBOT
echo robot python start
start /d "C:\dockerize" python python1.py
timeout 3
start /d "C:\dockerize" python python2.py
echo robot python completed
echo.
goto FINAL



:: service debug
:DEBUG

echo.
echo service check start !!!!!!!!!!!!

for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3306 ^| findstr success') do set result=%%a  
if %result%==1 (
echo mysql success
) else (
echo mysql fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3330 ^| findstr success') do set result=%%a
if %result%==1 (
echo rabbitmq success
) else (
echo rabbitmq fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3331 ^| findstr success') do set result=%%a
if %result%==1 (
echo service1 success
) else (
echo service1 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3332 ^| findstr success') do set result=%%a
if %result%==1 (
echo service2 success
) else (
echo service2 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3333 ^| findstr success') do set result=%%a
if %result%==1 (
echo service3 success
) else (
echo service3 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3334 ^| findstr success') do set result=%%a
if %result%==1 (
echo service4 success
) else (
echo service4 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3335 ^| findstr success') do set result=%%a
if %result%==1 (
echo service5 success
) else (
echo service5  fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 localhost 3336 ^| findstr success') do set result=%%a
if %result%==1 (
echo service6 success
) else (
echo service6 fail
)
for /f "tokens=1 delims= " %%a IN ('tcping -n 1 10.0.2.29 3336 ^| findstr success') do set result=%%a
if %result%==1 (
echo service7 success
) else (
echo service7 fail
)

for /f "tokens=1 delims= " %%a IN ('tcping -n 1 10.0.2.7 3337 ^| findstr success') do set result=%%a
if %result%==1 (
echo service8 success
) else (
echo service8 fail
)
ping -n 2 10.0.2.7 


echo service check end !!!!!!!!!!!!

echo.
echo.

goto FINAL


:Final
echo.
echo.
echo.
echo.
echo.
goto LOOP

:END
pause


 

2를 입력하여 실행한 이미지