프로그래밍 일반 2013. 7. 8. 12:56

윈도우 배치파일 문법 정리

- 도움말 확인하기
 해당 명령어 뒤에 /?
출력 결과를 텍스트 파일로 저장하기 > 파일.txt
예) FOR /? > "FOR 사용법.txt"

- 주석 작성
 @REM 블라블라블라

- 현재 작업 경로 알아내기

 %CD%를 하면 현재 작업 경로를 얻을 수 있다.

 @REM 현재 경로 저장

SET CurrentPath=%CD%

@REM 경로 이동

CD D:\DEV\Server

...코드

@REM 이전 경로로 복귀

CD %CurrentPath%



- 파일 복사

COPY


- 파일 이름을 변경한다.

RENAME [드라이브:][경로]파일이름1 파일이름2.

REN [드라이브:][경로]파일이름1 파일이름2.

서버 재시작시에 기존 기존 로그를 분리하는 등의 용도로 사용 가능

예) 

REN LoginError.log %date%_%time:~0,2%_%time:~3,2%_%time:~6,2%_LoginError.log

exit /b 0




배치파일을 만들면서 느낀 팁만 남기도록 한다.


어차피 배치파일 명령어 사용법은 /? 키워드를 사용하여 주석을 확인하는게 가장 정확하고 배치파일을 처음 접할 때 한가지만


잊지 않으면 배치파일 명령어는 간단하다. 바로 우리가 파일로 작성한 배치파일은 단순한 cmd.exe 에서 파일을 읽어 명령어를 사용한다는 사실이다.


한 예로 


@echo off

svn update .                            // 설정파일이 포함된 폴더의 svn을 업데이트하고

copy /Y Event.ini ..                  // 한단계 위로 파일 복사

copy /Y DurationEvent.ini ..

pause


배치 파일을 클릭해서 실행 시키면 해당 설정 폴더를 svn 업데이트하고 상위 폴더에 설정 설정파일들을 복사하는 배치 파일이 있다고하자.

 d:\server\public\배치파일


서비스 중에 이벤트 정보를 변경할 필요가 생겼을 때 모든 서버마다 수작업으로 해당 배치파일을 클릭해서 실행 시켜야한다면 매우 비효율 적이기 때문에 마스터서버에서 특정 명령어를 보내면 게임서버가 해당 배치파일을 실행 시키는 명령어를 만들었다고 치자.


명령어를 받은 게임 서버는 


::ShellExecute 등의 함수를 사용하여 배치파일을 실행 시키는데


이렇게되면 d:\server\.. 게임 서버의 모든 데이터가 update되고 

d:\server\Event.ini 파일이 -> d:\Event.ini 복사된다.


위와 같은 결과는 cmd.exe 에서 실행되는 과정을 보면 당연하다고 볼 수 있다.


서버파일이 존재하고 있는 경로 D:\Server\.. 에서 배치파일이 실행되었기 때문에 svn 업데이트 명령이나 파일 복사도 우리가 의도하지 않는 결과를 만들었다.


그러면 어떻게 해결할 수 있을까? 


위에서 이야기한 배치파일은 단순히 cmd.exe 에서 읽어들이는 명령어라고 생각하면 간단하다.


@echo off

cd public                                     // d:\server\public\.. 경로 이동..

svn update .                                // d:\server\public\.. 원하는 폴더만 업데이트

copy /Y Event.ini ..                      // 업데이트된 파일 상위로 복사

copy /Y DurationEvent.ini ..

pause

배치파일을 작성할 때는 항상 도스창에서 실행되는 명령어를 작성한다고 생각하면 의외로 단순하다는 사실을 잊지 말자.





웹서버 리스타트 배치 명령어

@echo off



@REM appcmd.exe 폴더로 경로 이동

cd %windir%\system32\inetsrv


@REM 사이트 종료

appcmd stop site /site.name:"사이트명"


@REM 응용 프로그램 풀 종료

appcmd stop apppool /apppool.name:"풀명"



@REM 퍼포스 업데이트



@REM appcmd.exe 폴더로 경로 이동

cd %windir%\system32\inetsrv


@REM 사이트 시작

appcmd start site /site.name:"사이트명"


@REM 응용 프로그램 풀 종료

appcmd start apppool /apppool.name:"풀명"