2014년 2월 9일 일요일



배치파일(일괄처리용 파일)
 : 명령 인터프리터에 의해 실행되는 텍스트 파일로, com,cmd등 과 같이 실행 파일을 자동으로 연속 실행할때 유용하다.

Point
- 확장명은 bat이다.
- 파일명은 도스 내부 명령어이름을 피해야 한다.
- 명령어 이름이 같아 충돌할 경우, dos는 dos key > 내부명령 > 외부명령(com->exe->bat)순으로 실행한다.
- bat파일은 표준 ascii문장 파일이다.



call //현재 실행중인 배치파일을 미종료하고, 필요한 배치파일을 호출하여 실행한 다음 원래 배치파일로 복귀
call c:\bats\sample.bat



choice //배치 파일에서 사용자의 선택을 입력받는다.
choice /c:abC /s /t : C, 다음중 하나를 선택하세요 a, b, C
//입력가능한 키를 abC로 한정하여 사용자로부터 입력되는 영 대소문자를 구분하는데 5초 이내 입력이 없다면 C가 입력된 것으로 처리한다.
/c[:]문자열 //사용자가 선택할 키 목록을 []안에 작성 ,로 구분하여 출력
/n //명령 프롬프트 미출력
/s //대소문자 구분
/t[:]기본키,대기시간 //기본키 지정후 일정시간 입력이 없으면 자동입력



echo //배치파일 명령어 출력여부를 설정하거나, echo뒤에 문자를 출력한다.
echo off //현재 실행중인 파일 명령어를 미출력
echo hello world! // hello world! 문자 출력



for //지정된 집합 중의 각각의 요소에 대해 명령으로 설정한 처리를 반복 실행
for %%변수 in 집합 do 명령 옵션 //배치 파일용
for %변수 in 집합 do 명령 옵션 //순차 처리용

%%, %변수는 임의의 영문자 1자 이며, %%는 배치파일 %는 일반 도스 프롬프트
집합 %%변수에 대입하고 싶은 값을 스페이스로 구분하여 순서대로 나열
명령 %%변수에 대입되어 있는 값에 대해 반복적으로 실행 명령 지정
옵션 지정한 명령의 옵션이나 for명령에서 지정한 옵션을 설정



goto //배치 처리의 흐름을 레이블에서 정의되어 있는 위치로 이동
goto loop //loop로 이동
:loop //레이블 지정



if //지정한 조건의 판단 결과에 따라서 배치 처리를 진행
if [NOT] <조건> <명령>
IF EXIST 파일이름 명령 //파일이름 존재시 명령 수행
IF NOT EXIT 파일이름 명령 //파일이름 미존재시 명령 수행
IF EXIST *.BAK DEL *.BAK //BAK라는 백업 파일을 모두 지워라
IF NOT "문자열1" == "문자열2" 명령 //문자열 1-2가 불일치시 명령 수행 (대소문자 구분)
IF NOT ERRORLEVEL 값 명령 // IF명령 바로 앞에 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드를 검사하여 지정값보다 크면 명령을 수행
종료코드 발생 명령어 : FORMAT, XCOPY, COPY, BACKUP, RESTORE 0~255범위의 종료코드
cf) XCOPY 명령 성공시 0, 파일이 없을 경우1, CTRL+C로 중지시 2, 초기화 오류시 4 디스크 에러
cf) &&(and), ||(or)
ex) if %x%==5(echo x 는 5입니다) else(echo x는 5가 아닙니다.)

조건
ERRORLEVEL <수치> 바로 전 실행한 명령의 종료 코드가 수치 이상일때 참 -> 명령어 실행
<문자열> == <문자열> 문자열1-2가 같을 경우 명령어 실행
EXIST<파일명> 파일명으로 지정한 파일 경로 존재시 명령어 수행
if exist c:\work\temp.$$$ del c:\work\temp.$$$
//경로에 temp.$$$라는 파일이 존재하면 파일을 삭제한다.



pause //배치파일 실행을 일시 정지
pause 아무 키나 눌러주세요.


rem //배치 파일 내에 주석문 사용

shift //옮김변위 대체인자를 한자리씩 왼쪽 이동(10개이상 가능)%1 <- %0으로 인자가 하나씩 이동한다


set /p key=입력하세요 : //변수 지정
> 값을 입력하면 key 변수에 입력한다.
ex)
set x = 0 //0
set x= 5*2 //5*2
set /a x=5*2 //10 /a가 수식임을 알려준다.
set /p x=입력 : //입력받기

리다이렉션 //출력과 입력의 방향 변경
<, >, <<, >>
echo 이 글을 텍스트에 저장 >test.txt //test.txt파일에 내용 새로 저장(기존내용 제거)
echo 이 글을 텍스트 파일에 저장 >>test.txt //test.txt의 맨 아래 내용을 추가
set /p x= <test.txt //test.txt의 내용을 x변수에 입력받는다.
puase > nul //pause실행시 공백


특수문자 사용
^> // >
^< // <
^>^> // >>
^<^< // <<
 ^% //%



<TIP>

1. @echo off //echo off도 출력하지 않는다.

2.  echo yl del *.* > nul //모든 파일을 지우기

3. 다중반복
for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3) do echo %%f%%g

4. 디렉토리가 존재하는지 확인
if not exist %1\nul if not exiat %1nul echo directory %1 dose not exist

5. 프로그램을 현디렉토리 사용 확인하기
set_found=
if exist %1 set_found=yes
for %%d in (%path%) do if exist %%d\%1 set_found=yes
for %%d in (%path%) do if exist %%d%1 set_found=yes
if "%_found%"=="yes" goto _continue
echo %1 is not at path or the current directory
goto _out
: _continue
echo %1 found at path or in the current directory
:_out

6. 배치파일에서재귀적 방법 사용하기
ex) safedel.bat 에서
-> for %%f in (%1) do call safedel %%f recurse
배치파일 0번째 인수 %0는 배치파일 자신을 나타내므로 safedel은 %0으로 대치되어 사용가능

7. 매개 인수(%1)를 대문자로 바꾸기
set tmp_=%path%
path=%1
set upcase_=%path%
path=%tmp_%

8. 새로운 디렉토리 붙이기
path=%path%;%1 //%1을 경로에 덧붙임


[배치파일 명령어 모음]
http://yong40.tistory.com/112

cf)
http://blog.naver.com/PostView.nhn?blogId=knight50&logNo=80127776249&parentCategoryNo=27&viewDate=&currentPage=1&listtype=0

http://blog.naver.com/PostView.nhn?blogId=ygszzang11&logNo=50152006593



ex) 7z //7z으로 압축하기

0 개의 댓글:

댓글 쓰기