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

들어가며

FOR 명령은 IF 명령과 함께 배치파일에서 지원하는 제어 명령이다. 또한 윈도XP는 도스의 그것보다 훨씬 강력한 기능을 제공하고 있다.

말뜻

FOR 명령에 쓰이는 for가 어떤 뜻에서 나왔는지를 알 수 없었다.

FOR 기본 문법

명령줄에서 FOR 사용

if 명령과 마찬가지로 FOR 명령도 명령줄에서 바로 쓸 수 있다.

  1. FOR %I IN (CD PATH VER) DO %I

아주 짧지만 분명히 잘 동작하며, FOR 명령의 기본 사용법을 잘 나타내고 있다.

FOR 명령의 기본 사용법은 다음과 같다.

FOR %변수 IN (집합) DO 명령어 [명령어 매개변수]

그런데 앞서 보인 코드에서는 명령어 부분이 생략되어 있는 특이한 경우이다. 물론 변수를 명령어 대신 사용하고 있기 때문이다.

모든 형식을 갖추어 FOR 명령을 사용한다면 다음과 같은 방법도 가능하다.

  1. FOR %I IN (%PATH%) DO ECHO %I

위의 코드는 PATH를 한 줄에 하나씩 보여준다.

  1. FOR %I IN (CD PATH VER) DO ECHO %I

위의 코드는 집합에 있는 3개 인자(CD PATH VER)을 ECHO 명령으로 출력하는 구문이다.

기본 문법

명령줄에서 다음과 같이 입력하면 기본 사용법을 알 수 있다.

  1. FOR /?

명령줄에서 사용하는 것과 배치파일에서 사용하는 방법에서 조금 차이가 있다.

FOR %변수 IN (집합) DO 명령어 [명령어 매개변수]

위의 사용법은 명령줄에서 사용하는 방법이다. 그런데 배치파일에서는 아래와 같이 사용해야 한다.

FOR %%변수 IN (집합) DO 명령어 [명령어 매개변수]

% 기호가 하나이냐 둘이냐에 따라 사용하는 곳이 달라진다. 이때 %변수는 주로 %I (퍼센트-대문자 아이)로 나타내는 때가 많으며, %I의 경우 대문자와 소문자를 구별하므로 주의해야 한다. 또한 1문자로 된 변수라면 0부터 9까지를 제외하면 모든 영문자를 사용할 수 있다. 대문자와 소문자를 구분하므로 총 52개를 사용할 수 있습니다.

예제

FOR문은 단순한 구조로 반복되는 작업에 자주 쓰인다.
윈도XP 업데이트 파일(핫픽스 파일)을 윈도XP에 통합하려고 할 때에는 그 파일명이 WindowsXP-KB*.exe와 같은 꼴을 이루게 된다. 이럴 때 FOR 구문을 이용하면 쉽게 할 수 있다.

  1. @echo off
  2. SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
  3. ECHO 윈도XP 복사본의 I386이 있는 디렉터리는?
  4. SET /P WORK=
  5. FOR %%I IN (WindowsXP-KB*.exe) DO %%I /integrate:%WORK% /nobackup /overwriteoem

위의 내용대로라면 중간에 한 차례 사용자 입력이 필요하지만, 처음부터 다음과 같이 지정해도 된다.

  1. @echo off
  2. FOR %%I IN (WindowsXP-KB*.exe) DO %%I /integrate:C:\WXP\i386 /nobackup /overwriteoem

이렇게 해도 몇몇 파일은 여전히 통합되지 않고 있으나, 하나하나 작업할 때에 비한다면 작업량이 매우 줄어든다. 더구나 이 배치파일은 나중에 재활용할 수 있다.

만약에 설치본에 통합하는 것이 아니라, 윈도XP를 설치한 뒤에 핫픽스만 따로 설치한다고 가정하면 위의 배치파일을 다음과 같이 고치면 된다.

  1. @echo off
  2. FOR %%I IN (WindowsXP-KB*.exe) DO %%I /nobackup /overwriteoem /quite /norestart

다음 예고

FOR 명령을 대해 좀 더 자세히 알아보자.
FOR 명령은 도스의 경우와 판이하게 달라져서 알면 아주 유용할 수도 있기 때문에 자세히 알아볼 필요가 있다.

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


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

FOR 명령 확장 2  (3) 2009.07.16
FOR 명령 확장 1  (2) 2009.06.17
FOR 명령  (6) 2009.05.16
GOTO 명령  (3) 2009.05.05
IF 명령 확장  (1) 2009.04.22
IF 문자열  (4) 2009.04.18
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

댓글을 달아주세요:: 왕미친놈 욕은 해도 되지만, 근거없는 소리는 쓰지 말아 주세요.
BBCode 사용할 수 있습니다.

  1. 바다내음
    2009.05.19 17:47
    for문을 이용해서 어떤 파일을 다른 디렉토리로 이동을 시키는데 문제는
    파일 이름이 그날 그날 날짜별로 바꾸면서 이동이나 복사를 한다면 그것도
    배치 파일로 작성이 가능할까요?
    예를 들어 C 드라이브에 A라는 파일이 있는데 배치 파일을 돌리면 그날 날짜에 맞게 A_20090517이란 이름의 파일로 이동이나 복사 시켜야 한다는거죠.
    • 2009.05.20 08:41
      댓글 주소 수정/삭제
      (1) FOR 문을 이용하여 이름 바꾸기는 간단하죠.
      FOR %%N IN (%FileList%) DO REN %%N %%N_%FileDate%
      위와 같이 하시면 됩니다.
      하지만 위와 같이 하면 나중에 분명히 문제가 생깁니다. 물론 바다내음 님이 써주신 조건은 만족합니다.
      (2) 그리고 %FileDate% 변수의 값이 미리 지정되어 있어야 합니다. 아래와 같이 하시면 됩니다.
      set FileDate=%date:-=%
  2. 바다내음
    2009.05.20 14:37
    아 감사합니다~
    간단하게 셀스크립트로 작성한걸
    도스 명령어로 바꿀려니 고민좀 했던 부분입니다.
    하다가 또 안되는 부분이 있으면 질문좀 드려도 될까요?
    • 2009.05.20 20:37
      댓글 주소 수정/삭제
      예. 저도 잘 알지는 못하지만, 공부한다 생각하고 답변해 드리겠습니다.
  3. 진만고양이
    2010.04.09 19:39
    for 루프의 이름은 영어 표현 “For …, do …”(…동안 …를 하라)에서 유래하였다. 라고

    위키백과에 써있네요
    http://ko.wikipedia.org/wiki/For_%EB%A3%A8%ED%94%84
    • 2010.04.10 06:58
      댓글 주소 수정/삭제
      예. 그렇지요. for 루프는 배치파일에서만 쓰이는 것이 아니라서 대부분 비슷한 이유에서 유래하고 있습니다.


카테고리

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

달력

«   2020/04   »
      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