윈도우팁/도스2010. 7. 7. 14:16


 
C:\>for/?
파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.

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

  %변수      바꿀 수 있는 매개 변수를 한 문자로 지정합니다.
  (집합)     하나 이상의 파일을 지정합니다. 와일드카드를 사용할 수 있습니다.
  명령어     각 파일에 대해 수행할 명령을 지정합니다.
  명령어-매개 변수
             지정된 명령의 매개 변수나 스위치를 지정합니다.

일괄 프로그램에서 FOR 명령을 쓰려면, '%변수' 대신 '%%변수'를 지정하십시오.
변수 이름에서는 대문자와 소문자를 구별하므로 %i와 %I는 다릅니다.

명령 확장을 사용하면 FOR 명령에 아래와 같은 추가적인 형태가
지원됩니다.

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

   집합에 대표 문자가 있으면 파일 이름 대신 디렉터리 이름과
   일치하도록 지정합니다.

FOR /R [[드라이브:]경로] %변수 IN (집합) DO 명령 [명령-매개 변수]

   [드라이브:]경로를 루트로 하여 디렉터리 트리를 따라 내려가며
   FOR 구문을 트리의 각 디렉터리에서 실행합니다. /R 스위치 뒤에
   디렉터리가 지정되지 않으면 현재 디렉터리가 사용됩니다.
   집합에 마침표(.)가 사용되면 디렉터리 트리만 나열합니다.

FOR /L %변수 IN (시작,단계,끝) DO 명령 [명령-매개 변수]

   집합은 단계별로 증가/감소하는 시작부터 끝까지의 일련의 숫자입니다.
   따라서 (1,1,5)는 1 2 3 4 5를 나타내며 (5,-1,1)은 5 4 3 2 1을
   나타냅니다.

FOR /F ["옵션"] %변수 IN (파일-집합) DO 명령 [명령-매개 변수]
FOR /F ["옵션"] %변수 IN ("문자열") DO 명령어 [명령-매개 변수]
FOR /F ["옵션"] %변수 IN ('명령어') DO 명령어 [명령-매개 변수]

    또는 usebackq 옵션이 있는 경우:

FOR /F ["옵션"] %변수 IN (파일-집합) DO 명령 [명령-매개 변수]
FOR /F ["옵션"] %변수 IN ('문자열') DO 명령어 [명령-매개 변수]
FOR /F ["옵션"] %변수 IN (`명령어`) DO 명령어 [명령-매개 변수]

   파일-집합은 하나 이상의 파일 이름입니다. 파일-집합의 각 파일은
   다음 파일로 이동하기 전에 열기 또는 읽기 등의 작업이 진행됩니다.
   파일을 읽어서 문자열을 한 행씩 분리하고 각 행을 0개 이상의
   토큰으로 구문 분석하는 과정으로 되어 있습니다. For 루프의 본문은
   발견된 토큰 문자열에 설정된 변수 값(들)과 함께 호출됩니다.
   기본값으로 /F는 파일의 각 행으로부터 분리된 토큰을 첫 번째 공백에
   전달합니다. 빈 행은 건너뜁니다. "옵션" 매개 변수를 지정하여
   기본 구문 분석 동작을 무시할 수 있습니다. 이것은 다른 구문 분석
   매개 변수를 지정하는 하나 이상의 키워드를 갖는 인용 부호로
   묶인 문자열입니다.
   키워드는 아래와 같습니다.

        eol=c           - 행 끝 설명 문자를 지정합니다
                          (하나만)
        skip=n          - 파일의 시작 부분에서 무시할 행의 개수를
                           지정합니다.
        delims=xxx      - 구분 문자 집합을 지정합니다.  이것은 공백 또는
                          탭에 대한 기본 구분 문자 집합을 바꿉니다.
        tokens=x,y,m-n  - 각 줄에서 어떤 토큰이 각 반복에 대한
                          For 구문으로 전달될지를 지정합니다.
                          이 작업은 추가 변수 이름이 할당되도록 됩니다.
                          m-n 형식은 m에서부터 n까지를 나타냅니다.
                          토큰=문자열 내에 있는 마지막 문자가 별표(*)이면,
                          추가 변수가 할당되고, 분석된 마지막 토큰
                          뒤에 남아 있는 텍스트를 받습니다.
        usebackq        - 억음 악센트 기호(`) 내의 문자열을 명령으로
                          처리하며, 작은따옴표(')는 문자열 명령어로
                          큰따옴표(")는 파일 이름 집합에서 파일 이름을
                          나타내도록 사용합니다.

    다음 예제를 참고하십시오.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k


    위의 예제에서는 myfile.txt의 모든 행을 구문 분석하지만
    세미콜론으로 시작하는 행은 무시하고, 각 행의 두 번째와
    세 번째 토큰을 컴마 및/또는 공백으로 구분되는 토큰으로
    For 본문으로 전달합니다. 두 번째, 세 번째, 나머지 토큰을
    가져오려면, For 본문 내용의 %i, %j, %k를 참조하십시오.
    공백을 포함한 파일 이름의 경우, 파일 이름에 큰따옴표(")를
    적용하십시오. 큰따옴표를 적용하려면 "usebackq" 옵션을
    사용해야 합니다. 그렇지 않으면, 큰따옴표는 분석할 문자로
    취급됩니다.

    %i는 구문에서 정의되며, %j와 %k는 "tokens=" 옵션에서
    정의됩니다. "tokens=" 행에서는 26개의 토큰까지
    정의할 수 있으나 'z'나 'Z' 보다 큰 변수를 정의할 수는 없습니다.
    FOR 변수는 하나의 문자이며 대/소문자를 구분하며, 글로벌 변수로
    한 번에 52개 이상을 사용할 수 없습니다.

    괄호 사이에 있는 파일 이름 세트에 작은따옴표(')를 사용하면,
    해당 문자열에서 FOR /F 구문 분석을 사용할 수 있습니다.
    이와 같은 경우, 하나의 행으로 취급되며 분석됩니다.

    괄호 사이에 있는 파일 이름 세트에 억음 악센트 기호(`)를
    사용하면, 해당 명령에 대한 결과를 분석하는데 FOR /F 명령을
    사용할 수 있습니다. 이와 같은 경우, CMD.EXE로 전달된 명령줄로
    취급되며, 결과는 메모리에 저장되고 파일처럼 분석됩니다.

    다음 예제는 현재 환경의 환경 변수 이름을 나열합니다.

    FOR /F "usebackq delims==" %i IN (`집합`) DO @echo %i

추가적으로 FOR 대체 변수 참조가 확장되었습니다.
다음과 같은 옵션 구문을 사용할 수 있습니다:

    %~I         - 따옴표(")를 제거하는 %I을 확장합니다.
    %~fI        - %I을 전체 인정된 경로 이름으로 확장합니다.
    %~dI        - %I을 드라이브 문자로만 확장합니다.
    %~pI        - %I을 경로로만 확장합니다.
    %~nI        - %I을 파일 이름으로만 확장합니다.
    %~xI        - %I을 파일 확장명으로만 확장합니다.
    %~sI        - 확장된 경로가 짧은 이름만 가지고 있습니다.
    %~aI        - %I이 파일의 파일 속성으로만 확장합니다.
    %~tI        - %I을 파일의 날짜/시간으로만 확장합니다.
    %~zI        - %I을 파일 크기로만 확장합니다.
    %~$PATH:I   - PATH 환경 변수 목록에 있는
                   디렉터리를 찾고 %I을 처음으로 찾은
                   전체 인정된 파일 이름으로 확장합니다.
                   환경 변수 이름이 정의되지 않았거나
                   찾기에서 파일을 찾지 못하면
                   이 구문에서 빈 문자열로 확장합니다

위의 구문은 여러 가지 결과를 얻기 위해 결합될 수 있습니다.

    %~dpI       - %I을 드라이브 문자와 경로로만 확장합니다.
    %~nxI       - %I을 파일 이름과 확장명으로만 확장합니다.
    %~fsI       - %I 을 짧은 이름을 가진 전체 경로 이름으로만 확장합니다.
    %~dp$PATH:i - %I에 대한 PATH 환경 변수 목록에 있는
                   디렉터리를 찾고 처음 찾은 것의
                   드라이브 문자와 경로로 확장합니다.
    %~ftzaI     - %I을 출력줄과 같은 DIR로 확장합니다.

위의 예제에서 %I과 PATH는 다른 유효한 값으로 바뀔 수 있습니다.
%~ 구문은 유효한 FOR 변수 이름으로 종료됩니다.
%I와 같은 대문자 변수 이름을 선택하면 쉽게 읽을 수 있으며
대/소문자를 구분하지 않는 구문에서 혼동을 피할 수 있습니다.

C:\>

설명하기 위해서 간단하게 폴더와 파일을 만들자.

C:\>md test

C:\>cd test

C:\test>dir > sample.txt

C:\test>md aa

C:\test>md bb

C:\test>copy sample.txt aa\aa11.txt
        1개 파일이 복사되었습니다.

C:\test>copy sample.txt aa\aa22.txt
        1개 파일이 복사되었습니다.

C:\test>copy sample.txt bb\bb11.txt
        1개 파일이 복사되었습니다.

C:\test>copy sample.txt bb\bb22.txt
        1개 파일이 복사되었습니다.


C:\test>for %i in (*) do echo %i

C:\test>echo sample.txt
sample.txt

** %path%에서 공백을 구분자로 하여 명령어가 실행된다.
C:\test>FOR %I IN (%PATH%) DO ECHO %I

C:\test>ECHO C:\WINDOWS\system32
C:\WINDOWS\system32

C:\test>ECHO C:\WINDOWS
C:\WINDOWS

C:\test>ECHO C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\Wbem

C:\test>ECHO C:\Program
C:\Program

C:\test>ECHO Files\Java\jdk1.5.0_16\bin
Files\Java\jdk1.5.0_16\bin

C:\test>ECHO C:\Program
C:\Program

C:\test>ECHO Files\IDM
Files\IDM

C:\test>ECHO Computer
Computer

C:\test>ECHO Solutions\UltraEdit\
Solutions\UltraEdit\

C:\test>FOR %I IN (동해물과 백두산이 마르고 닳도록) DO ECHO %I

C:\test>ECHO 동해물과
동해물과

C:\test>ECHO 백두산이
백두산이

C:\test>ECHO 마르고
마르고

C:\test>ECHO 닳도록
닳도록

** /d 디렉토리 전용 옵션
C:\test>for /d %i in (*) do echo %i

C:\test>echo aa
aa

C:\test>echo bb
bb

** /r 하위디렉토리 옵션
C:\test>for /r %i in (*) do echo %i

C:\test>echo C:\test\sample.txt
C:\test\sample.txt

C:\test>echo C:\test\aa\aa11.txt
C:\test\aa\aa11.txt

C:\test>echo C:\test\aa\aa22.txt
C:\test\aa\aa22.txt

C:\test>echo C:\test\bb\bb11.txt
C:\test\bb\bb11.txt

C:\test>echo C:\test\bb\bb22.txt
C:\test\bb\bb22.txt

** /l 변수 가감
C:\test>for /l %i in (1,2,5) do echo %i

C:\test>echo 1
1

C:\test>echo 3
3

C:\test>echo 5
5

** /f 파일,집합에 대한 루핑처리. 위에 있는 예제대로 하기위해 아래대로 해보자.
C:\test>dir c:\ > myfile.txt
C:\test>type myfile.txt
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: B074-04F5

 c:\ 디렉터리

2010-03-10  오전 07:52                 0 AUTOEXEC.BAT
2010-03-10  오전 07:52                 0 CONFIG.SYS
2010-06-25  오후 07:02    <DIR>          Documents and Settings
2010-03-10  오전 07:56    <DIR>          Intel
2010-06-28  오후 06:35    <DIR>          log
2010-07-06  오후 03:43    <DIR>          Program Files
2010-03-10  오전 08:28               190 setup.log
2010-06-30  오후 01:35    <DIR>          Temp
2010-07-07  오후 01:41    <DIR>          test
2010-07-07  오전 08:28    <DIR>          WINDOWS
               x개 파일               x,xxx 바이트
              xx개 디렉터리  xx,xxx,xxx,xxx 바이트 남음

** 응? 뭐가 뭔지 잘 모르겠다.
C:\test>FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
드라이브의 볼륨에는 이름이 없습니다.
일련 번호: B074-04F5
디렉터리
오전 07:52 0 AUTOEXEC.BAT
오전 07:52 0 CONFIG.SYS
오후 07:02 <DIR>          Documents and Settings
오전 07:56 <DIR>          Intel
오후 06:35 <DIR>          log
오후 03:43 <DIR>          Program Files
오전 08:28 190 setup.log
오후 01:35 <DIR>          Temp
오후 01:41 <DIR>          test
오전 08:28 <DIR>          WINDOWS
파일 x xxx 바이트
디렉터리 xx xxx,xxx,xxx 바이트 남음

** 뭔소린지 보기 위해 하나씩 해보자
C:\test>FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i
드라이브의
일련
디렉터리
오전
오전
오후
오전
오후
오후
오후
오전
오후
오후
오전
파일
디렉터리

C:\test>FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %j
볼륨에는
번호:
ECHO가 설정되어 있습니다.
07:52
07:52
07:02
07:56
06:35
03:43
08:28
01:35
01:41
08:28
x
xx

** 그렇다 token에 지정된 2,3번째 열이 각각 %j와 %k에 할당되었다.
C:\test>FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %k
이름이 없습니다.
B074-04F5
ECHO가 설정되어 있습니다.
0 AUTOEXEC.BAT
0 CONFIG.SYS
<DIR>          Documents and Settings
<DIR>          Intel
<DIR>          log
<DIR>          Program Files
190 setup.log
<DIR>          Temp
<DIR>          test
<DIR>          WINDOWS
xxx 바이트
xxx,xxx,xxx 바이트 남음

** 이외 추가 옵션도 있지만 생략한다. 귀차니즘 ~_~
** 도움이 되는 for문 팁을 소개하는 것으로 후딱 마친다.

'윈도우팁 > 도스' 카테고리의 다른 글

텍스트파일 합치기  (0) 2010.08.31
Dos FTP transfer batch  (0) 2010.08.26
Dos 관련 사이트  (0) 2010.07.13
Dos Command - 활용  (0) 2010.07.07
Dos Command - IF  (0) 2010.07.07
Posted by 투덜ⓔ