batch

김상우·2022년 8월 21일
0

여러가지를 보고 듣고 공부하게 되면서 윈도우의 .bat이라는 확장자를 가진 파일을 접하게 되었다.
그런데 아직 상당한 부분을 모르는 나로써는 어디에 사용하고 어떤 목적인지 등 batch script라는 것에 대해 근본적인 이유에 대해 궁금해졌다.
이번 포스트는 순서도 전문가들이 볼 때 먼저 알아야하는 내용들이 뒤죽박죽으로 작성되어 보기 불편할 수도 있다.

배치 파일(Batch File)이란

어떤 반복되는 작업을 일괄적으로 한꺼번에 처리하는 데 사용하는 스크립트로, 간단한 프로그래밍 언어의 한 종류라고도 할 수 있다.
특히 반복적인 작업이 필요한 경우, 수작업으로 일일이 반복하는 것보다 스크립트를 작성해 스크립트를 작동하는 간단한 작업을 통해 귀찮은 일들을 좀 더 자동화하는 것에 초점을 두면 좋을 것 같다.

ex1. 특정 경로에 있는 데이터를 백업하기 위한 파일들을 복사한 후 잘 복사되었는지 확인하는 작업
ex2. 프롬프트에서 너무나도 긴 명령어를 입력하여 실행하는 작업을 자주 해야하는 경우

프로그래밍은 인간의 귀차니즘에 의해서 탄생했다는데 맞는 말인 것 같다.

간단한 문법

  • ECHO
    • 명령이 실행될 때 명령어의 이름을 보여주거나 감춰주는 기능으로 Toggle키 처럼 작동하여 ECHO ON, ECHO OFF로 처리과정 등을 화면에 출력하거나 감추는 등의 역할을 한다.
      • ECHO ON 이 기본값이라고 한다.
      • Shell Script에서 echo 를 통해 다음 문장을 출력하는 것을 생각하면 이해하기 쉬운 것 같다.
      • 따라서 스크립트 내에 @ECHO OFF라고 스크립트에 입력하면 후에 입력한 문장이 보이지 않는다.
  • REM
    • 주석(Comment)를 뜻하는 명령어로 REM [설명문] 형태로 작성하여 설명문 부분을 컴파일 할 내용에서 제외하고 컴파일이 진행될 수 있도록 하며, 주석이라는 말 그대로의 역할을 한다.
  • PAUSE
    • 중지라는 의미를 가진 명령어이다. 사실 일지정지라는 말이 더 어울릴지도 모르겠다. batch 프로그래밍을 실행하고 중지하는 (ctrl + c)와 같은 기능이라고 생각하면 쉬울 것 같다.
  • IF
    • 여느 프로그래밍 언어에서 사용하는 if~else와 같은 기능을 한다. 물론 ELSE도 같이 사용할 수 있다.
    • IF EXIST
      IF 문에 EXIST를 추가하여 존재여부에 따라 하위 문장을 실행할지 말지에 대한 조건이 달려있는 명령어이다. 기본적인 구조는 IF EXIST [조건] [명령]으로 조건에 해당하는 파일이나 변수에 입력된 값이 '존재'한다면 다음에 작성한 명령을 수행하는 구조이다.
    • IF NOT EXIST
      바로 위에 작성한 IF EXIST와 동일한 형태로 NOT을 통해 알 수 있는 점은 조건에 해당하는 파일이나 변수에 입력된 값이 '존재하지 않는다면' 다음에 작성한 명령을 수행한다.
  • FOR
    • IF 와 마찬가지로 여러가지 언어에서 활용되는 for문과 동일한 기능을 한다. FOR 다음에 작성된 주어진 조건을 만족할 떄까지 도스 명령어를 수하는 반복문이다. 구조는 FOR %%변수명 IN (SET) DO Command이다.
  • GOTO
    조건에서 만족하면 지정한 Label로 이동하는 제어를 옮겨준다. Label 명은 콜론(:)을 앞에두고 작성할 수 있으며 아래의 예시에서 구조를 확인할 수 있다.
    if '%errorlevel%' NEQ '0' (
    		goto User
      ) else (
    		goto Admin
      )
      
    :User
    echo you are not admin
    :Admin
    echo you are admin
    에러레벨의 수준에 따라 각각 GOTO를 통해 User와 Admin이 있는 Label로 이동하는 것을 볼 수 있다.

비교연산자

일반적으로 c, java, python 등의 언어에서 비교연산자가 '==', '!=', '<', '>' 등으로 사용한다.
batch script를 완전 처음 봤을 때 의미를 몰랐던 것들 중 비교연산자였는데 기호로 표시하지 않는다는 점으로 보아 나처럼 처음 보는 사람은 모를수 있겠다는 생각이 들어 따로 검색해 정리해보았다.

비교연산자설명사용 예시의미
equequal(동일)%var1% equ %var2%var1과 var2는 동일하다.
neqnot equal(부정)%var1% neq %var2%var1과 var2는 동일하지 않다.
gtrgreater(초과)%var1% gtr %var2%var1이 var2보다 크다.
geqgreater than equal(이상)%var1% geq %var2%var1이 var2보다 크거나 같다.
leqless than equal(이하)%var1% leq %var2%var1이 var2보다 작거나 같다.
lssless(미만)%var1% lss %var2%var1이 var2보다 작다.
==문자 비교에서 사용%str1% == %str2%str1과 str2의 문자가 같다.
  • ==연산에서 대소문자 구분을 안하면서 동일한지 비교하기 위해 /i 옵션을 사용해 /i %str1% == %str%처럼 활용할 수 있다.

batch script로 구성된 파일을 처음 보고 그 파일을 기준으로 작성한 포스트이므로 추가로 더 공부하고 알게되는 내용이 있다면 추가 포스팅 할 것이다.

profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글