노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.

들어가며

앞서 매개변수의 의미와 자기자신(?)을 출력하는 배치파일을 소개했다.

이 글에서는 매개변수를 활용하여 프로그램을 작성해 보자.

말뜻

매개변수, 곧 파라미터(parameter)는 도스와 윈도의 명령줄에서 어떤 명령어와 관계를 맺고 어떤 작용을 지시하는 변수나 인자를 가리킨다. 자주 언급되었던 ECHO OFF 명령에서 실제 명령어는 ECHO뿐이고, OFF는 매개 변수이다. 명령줄에서 명령어 뒤에 죽 나열하는 문자열은 대개 매개변수이다.

또한 매개변수 전달이란 명령줄에 입력한 명령과 매개변수를 프로그램에서 사용할 수 있는 형태로 알려주는 일을 가리킨다. 이를 위해 배치파일은 %n의 꼴을 사용한다.

  1. @echo Hello %0!

앞서 사용했던 저 한 줄짜리 코드 마지막에 붙은 %0와 같은 꼴로 쓰인다는 뜻이다.

매개변수를 정확히 알기

매개변수 %0과 %*

지금까지 말한 매개변수는 정확하지 않다. 물론 그와 같은 설명이 틀렸다는 말이 아니다. 그러나 엄밀히 말하면 옳지는 않다.

  1. @rem HelloWho.cmd
  2. @echo Hello %0, %*!

첫줄은 주석이므로 적든지 말든지 알아서 하기 바란다. 둘째 줄이 실제 실행 코드이다.

아무튼 아래 그림을 보고 여러 가지로 적용해 보기 바란다.

위의 그림을 보면 매개변수 %0은 배치파일 자신이 아님을 알 수 있다. 만약 매개변수 %0으로 자신을 가리키게 했다면 매번 다른 결과가 나오지 않아야 하기 때문이다. 다른 의미로 매개변수 %0은 명령줄에 입력된 첫번째 인자를 가리킨다는 뜻이다. 컴퓨터에서 첫번째 인자를 0번으로 표기하는 일이 잦으므로 그다지 놀라운 일은 아니다.

또한 위의 코드에서 %0과 %*를 나누어 썼다는 점에서 한 가지를 알 수 있다. %0은 일반적인 매개변수와는 다르게 취급된다는 점이다. %*는 "명령줄에 입력된 모든 매개변수"라는 뜻임에도 불구하고 %0을 제외하고 있음에서 그것을 알 수 있다.

다른 매개변수

매개변수는 앞서 말했듯이 %n의 꼴로 나타낸다. 이때 n은 일반적으로 숫자이고, 특별한 경우에 *(별표)가 올 수 있다. 이 말은 곧 %10과 같은 매개변수는 존재하지 않는다는 뜻이다. 숫자와 수를 구별하자. 10은 수이지만, 숫자는 아니다. 그에 따라 %n의 꼴로 나타낼 수 있는 매개변수는 %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %*, 이렇게 열한 개이다.

하지만 위에서는 분명히 "%10"에 해당하는 매개변수를 전달 받았다. 물론 그것은 사실이다. 다만 %10과 같은 매개변수가 존재하지 않을 뿐이고, 명령줄에서 입력받는 매개변수는 컴퓨터의 기억장치 어딘가에 저장되어 있다는 뜻이다. %*는 자신이 가진 특별한 기능, 곧 %0을 제외한 모든 매개변수를 불러오는 기능을 사용해서 처리했을 뿐이다.

  1. @rem HelloWho2.cmd
  2. @echo Hello %0, %*!
    @echo Hello %0, %1 %2 %3 %4 %5 %6 %7 %8 %9!

두 코드의 차이를 보이기 위해 한꺼번에 작성했다.

다른 매개변수를 넣어서 시험해 보기 바란다.

%* 정확히 알기

아까 알려주고는 뭘 또 정확히 알자고 그러냐고? 아까 그것은 %0과 함께 알려준 내용이고, %*은 다른 매개변수와는 조금 다른 점이 있다는 말씀!

%*을 편의상 별 매개변수라고 부르자.

이 별 매개변수는 매개변수 자체를 다루지 않는다. 헉! 무슨 헛소리를 하느냐고? 정말이다. 이 별 매개변수 녀석이 다루는 것은 명령줄 자체이다.

윗줄은 분명히 별 매개변수를 이용하여 출력하였고, 아랫줄은 %n의 꼴로 출력하였다. 별 매개변수가 명령줄을 다룬다는 뜻은 위와 같이 매개변수 사이에 있는 공백까지 문자(공백문자)로 인식하여 전달 받았음을 뜻한다. 반면에 %1, %2 등은 공백문자로 나뉜 각각의 매개변수를 전달 받아 이용하고 있다.

매개변수 활용

예제 5에서 윈도 폴더를 보여주는 배치파일을 만들었다. 그것을 고쳐서 사용자가 지정하는 폴더(엄밀히 말하면 디렉터리)를 보여주는 배치파일을 만들자.

D:\Usr\LCP\바탕 화면\배치파일>dir /?
디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줍니다.

DIR [드라이브:][경로][파일 이름] [/A[[:]특성]] [/B] [/C] [/D] [/L] [/N]
  [/O[[:]정렬 순서]] [/P] [/Q] [/S] [/T[[:]시간 필드]] [/W] [/X] [/4]

  [드라이브:][경로][파일 이름]
              나타낼 드라이브, 디렉터리 및/또는 파일을 지정합니다.

  /A          지정된 특성을 가진 파일을 보여줍니다.
  특성        D  디렉터리                   R  읽기 전용 파일
              H  숨김 파일                  A  기록 파일
              S  시스템 파일                -  부정을 뜻하는 접두사
  /B          최소 형식을 사용합니다 (머리말 정보나 요약 없음).
  /C          파일 크기에 1000단위로 분리 기호를 보여줍니다. 이것은 기본값
              입니다. 분리 기호를 표시하지 않으려면 /-C를 사용하십시오.
  /D          /W와 같으나 세로로 배열하여 보여줍니다.
  /L          소문자를 사용합니다.
  /N          파일 이름이 제일 오른쪽에 오도록 새로운 긴 목록 형식을
              사용합니다.
  /O          파일을 정렬된 순서로 보여줍니다.
  정렬순서    N  이름순(문자 순서)    S  크기순(작은 것 먼저)
              E  확장명순(문자 순서)  D  날짜/시간순(가장 이전 것 먼저)
              G  그룹 디렉터리 먼저         -  순서를 반대로 하는 접두 기호
  /P          정보가 한 화면에 꽉 차면 잠깐 멈춥니다.
  /Q          파일 소유자를 보여 줍니다.
  /S          지정한 디렉터리와 하위 디렉터리를 포함하여 보여줍니다.
  /T          정렬에 사용할 시간 필드를 지정합니다.
  시간필드   C  작성한 시간
              A  마지막 액세스한 시간
              W  마지막 기록한 시간
  /W          이름만 가로로 배열하여 보여줍니다.
  /X          8.3 파일 이름이 아닌 파일에 대한 짧은 이름을 보여줍니다.
              이 형식은 긴 이름 앞에 짧은 이름이 추가된 것으로 /N 형식과
              같습니다. 짧은 이름이 없으면 공백을 보여줍니다.
  /4          4자리수 연도를 표시합니다.

스위치를 DIRCMD 환경 변수로 미리 설정할 수 있습니다. 하이픈(-)을
스위치 앞에 접두 기호로 주면 미리 설정된 스위치에 우선합니다. (예, /-W)


D:\Usr\LCP\바탕 화면\배치파일>

우선 명령줄에서 dir /? 라고 명령을 주면 위와 같은 내용을 보여준다. "/문자"의 꼴로 나타나는 것이 매개변수 가운데 선택사항(옵션)이다.

이 가운데 우리가 사용할 선택사항은 /a /p /4 이다. 더 추가하고 싶으면 스스로 선택하기 바란다. 셸 내장 명령어는 선택사항을 줄 때 대부분 대문자/소문자를 가리지 않는다. 그래서 앞의 세 선택사항은 /A /P /4 와 같은 의미이다.

  1. @echo off
  2. rem 예제 10 : 사용자가 지정하는 폴더를 보여주는 배치파일
  3. rem 파일명 : exam10.cmd
  4. rem 지은이 : koc2000/SALM
  5. rem 저작권 : GPL v3
  6. echo 예제 10.
  7. echo 사용자가 지정하는 폴더를 보여준다.
  8. echo 보다가 종료하려면 Ctrl+Pause 키나 Ctrl+C를 누르시오.
  9. PAUSE
  10. echo.
  11. DIR /A /P /4 %1

맨 마지막 줄이 이 배치파일의 핵심이다. 사실 저 한 줄만 있어도 실행에는 전혀 지장이 없다. 저대로 실행해 보고 나서 의문이 생긴다면 글 남기세요.

과제

다들 싫겠지만, 약간의 과제를 내겠다.

  • ECHO 명령을 이용하여 화면에 OFF라는 세 글자를 출력하시오. 예시 화면은 다음과 같다.

OFF의 위치나 대/소문자 등은 자신이 좋아하는 위치와 형태를 따르면 된다. 위와 같이 세 번 나타낼 필요는 없다. 1회만 출력하면 된다. 저것을 입력하기 위해 배치파일에 Echo off 라고 하면 아무것도 출력되지 않는다. 어떻게 해야 출력할 수 있는지는 스스로 탐구해야 한다. 이 문제도 알고 나면 너무 쉽다. 다만 O F F 처럼 띄어쓰기를 하면 안 된다.

  • DIR 명령을 이용하여 원하는 폴더(디렉터리)의 내용을 폴더(디렉터리)만 보여주도록 한다. /A /P 선택사항을 반드시 사용할 것. 예시 화면은 다음과 같다.

다음 예고

IF 이용하기

이 글은 스프링노트에서 작성되었습니다.

'스크립트 > 배치파일' 카테고리의 다른 글

IF 기본 설명  (6) 2009.04.09
배치파일에 매개변수 전달하기 2  (5) 2009.04.04
배치파일 멈추기  (1) 2009.03.29
그밖에 출력  (2) 2009.03.26
주석 및 화면 출력  (3) 2009.03.23
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

글 보관함