들어가며
FOR 명령은 IF 명령과 함께 배치파일에서 지원하는 제어 명령이다. 또한 윈도XP는 도스의 그것보다 훨씬 강력한 기능을 제공하고 있다.
말뜻
FOR 명령에 쓰이는 for가 어떤 뜻에서 나왔는지를 알 수 없었다.
FOR 기본 문법
명령줄에서 FOR 사용
if 명령과 마찬가지로 FOR 명령도 명령줄에서 바로 쓸 수 있다.
- FOR %I IN (CD PATH VER) DO %I
아주 짧지만 분명히 잘 동작하며, FOR 명령의 기본 사용법을 잘 나타내고 있다.
FOR 명령의 기본 사용법은 다음과 같다.
FOR %변수 IN (집합) DO 명령어 [명령어 매개변수]
그런데 앞서 보인 코드에서는 명령어 부분이 생략되어 있는 특이한 경우이다. 물론 변수를 명령어 대신 사용하고 있기 때문이다.
모든 형식을 갖추어 FOR 명령을 사용한다면 다음과 같은 방법도 가능하다.
- FOR %I IN (%PATH%) DO ECHO %I
위의 코드는 PATH를 한 줄에 하나씩 보여준다.
- FOR %I IN (CD PATH VER) DO ECHO %I
위의 코드는 집합에 있는 3개 인자(CD PATH VER)을 ECHO 명령으로 출력하는 구문이다.
기본 문법
명령줄에서 다음과 같이 입력하면 기본 사용법을 알 수 있다.
- FOR /?
명령줄에서 사용하는 것과 배치파일에서 사용하는 방법에서 조금 차이가 있다.
FOR %변수 IN (집합) DO 명령어 [명령어 매개변수]
위의 사용법은 명령줄에서 사용하는 방법이다. 그런데 배치파일에서는 아래와 같이 사용해야 한다.
FOR %%변수 IN (집합) DO 명령어 [명령어 매개변수]
% 기호가 하나이냐 둘이냐에 따라 사용하는 곳이 달라진다. 이때 %변수는 주로 %I (퍼센트-대문자 아이)로 나타내는 때가 많으며, %I의 경우 대문자와 소문자를 구별하므로 주의해야 한다. 또한 1문자로 된 변수라면 0부터 9까지를 제외하면 모든 영문자를 사용할 수 있다. 대문자와 소문자를 구분하므로 총 52개를 사용할 수 있습니다.
예제
FOR문은 단순한 구조로 반복되는 작업에 자주 쓰인다.
윈도XP 업데이트 파일(핫픽스 파일)을 윈도XP에 통합하려고 할 때에는 그 파일명이 WindowsXP-KB*.exe와 같은 꼴을 이루게 된다. 이럴 때 FOR 구문을 이용하면 쉽게 할 수 있다.
- @echo off
- SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
- ECHO 윈도XP 복사본의 I386이 있는 디렉터리는?
- SET /P WORK=
- FOR %%I IN (WindowsXP-KB*.exe) DO %%I /integrate:%WORK% /nobackup /overwriteoem
위의 내용대로라면 중간에 한 차례 사용자 입력이 필요하지만, 처음부터 다음과 같이 지정해도 된다.
- @echo off
- FOR %%I IN (WindowsXP-KB*.exe) DO %%I /integrate:C:\WXP\i386 /nobackup /overwriteoem
이렇게 해도 몇몇 파일은 여전히 통합되지 않고 있으나, 하나하나 작업할 때에 비한다면 작업량이 매우 줄어든다. 더구나 이 배치파일은 나중에 재활용할 수 있다.
만약에 설치본에 통합하는 것이 아니라, 윈도XP를 설치한 뒤에 핫픽스만 따로 설치한다고 가정하면 위의 배치파일을 다음과 같이 고치면 된다.
- @echo off
- FOR %%I IN (WindowsXP-KB*.exe) DO %%I /nobackup /overwriteoem /quite /norestart
다음 예고
FOR 명령을 대해 좀 더 자세히 알아보자.
FOR 명령은 도스의 경우와 판이하게 달라져서 알면 아주 유용할 수도 있기 때문에 자세히 알아볼 필요가 있다.
이 글은 스프링노트에서 작성되었습니다.
for문을 이용해서 어떤 파일을 다른 디렉토리로 이동을 시키는데 문제는
답글삭제파일 이름이 그날 그날 날짜별로 바꾸면서 이동이나 복사를 한다면 그것도
배치 파일로 작성이 가능할까요?
예를 들어 C 드라이브에 A라는 파일이 있는데 배치 파일을 돌리면 그날 날짜에 맞게 A_20090517이란 이름의 파일로 이동이나 복사 시켜야 한다는거죠.
@바다내음 - 2009/05/19 17:47
답글삭제(1) FOR 문을 이용하여 이름 바꾸기는 간단하죠.
FOR %%N IN (%FileList%) DO REN %%N %%N_%FileDate%
위와 같이 하시면 됩니다.
하지만 위와 같이 하면 나중에 분명히 문제가 생깁니다. 물론 바다내음 님이 써주신 조건은 만족합니다.
(2) 그리고 %FileDate% 변수의 값이 미리 지정되어 있어야 합니다. 아래와 같이 하시면 됩니다.
set FileDate=%date:-=%
아 감사합니다~
답글삭제간단하게 셀스크립트로 작성한걸
도스 명령어로 바꿀려니 고민좀 했던 부분입니다.
하다가 또 안되는 부분이 있으면 질문좀 드려도 될까요?
@바다내음 - 2009/05/20 14:37
답글삭제예. 저도 잘 알지는 못하지만, 공부한다 생각하고 답변해 드리겠습니다.
for 루프의 이름은 영어 표현 “For …, do …”(…동안 …를 하라)에서 유래하였다. 라고
답글삭제위키백과에 써있네요
http://ko.wikipedia.org/wiki/For_%EB%A3%A8%ED%94%84
@진만고양이 - 2010/04/09 19:39
답글삭제예. 그렇지요. for 루프는 배치파일에서만 쓰이는 것이 아니라서 대부분 비슷한 이유에서 유래하고 있습니다.