posted by 블르샤이닝 2011. 7. 6. 15:52
728x90

@ 기본 명령어 사용 구조

For /F "옵션" %변수 in (구문) do 명령어

가장 기본적인 것만을 몇가지 사용하자.
 [그이상은 나도 잘 모름.]

() 안에 있는 문자열, 파일, 명령어의 출력값 등에 대해 do 이하 명령어를 수행한다. 


@ 본격 분석.===> 아래 구문을 보기 위해서는 우선 Cmd 의 date 명령어를 먼저 봐주세요.

 

>>아래 명령을 실행해보세요.

D:\tmp>For /F "tokens=1 delims= " %i IN ('date /t') DO echo %i

>> 결과

D:\tmp>echo 2010-10-16
 2010-10-16

 

tokens : FOR 문은 각 행별로 분석하는데 Tokens 은 ()에서 나온 결과의 몇번째 문자열을 전달해줄지 지정.

 

delims : ()에서 나온 결과 String의 분해시 기준 character를 설정한다.

  - -> 조금 이해 되기 힘들죠...^^ 예제 몇개 보면 이해 되실것입니다. 패스.

 

%i : () 구문의 결과값이 들어간다고 생각하시면 됩니다. 물론 이결과는 tokens와 delims 옵션에 영향을 받습니다.

   ==> 들어갈수 있는 char 값은 0~9 , a~z A~Z 가능합니다. 만약 %aa 로 넣으면 에러가 발생할 것입니다.

          다른 것이 더 있다면 알려주세요. 저도 여기까지 밖에 몰라요. 독한한거라...^^

   ==> "%변수"의 경우 bat 파일 안에 들어갈 때는 "%%변수" 형태로 적어줘야 합니다.

          "%변수"는 대소문자를 구분합니다. 즉 "%a"와 "%A"는 다릅니다.

           Ex1> cmd창에서 아래와 같이 호출하지만,

              D:\tmp>for /f "tokens=1" %i in ('date /t') do echo %i

           =>  Bat파일에서는 아래와 같이 %%두개를 넣어야된다.

              For /F "tokens=1" %%i in ('date /t') do echo %%i

 

DO echo %i : 이건 그냥...DO 이하는 Echo라는 명령으로 i의 내용을 출력하는 것이니 패스.

 

위 네가지 속성을 종합해 보면, ()안 date라는 명령으로 생성된 스티링을

delims 속성으로 tokens으로 지정한 첫번째 스트링을 a가 갖게 되는 것입니다.

 

@좀더 쉬운예제

 

Ex1>

D:\tmp>For /F "tokens=1 delims= " %A IN ("Hello Bat_file") DO echo %A

>> 결과

Hello

 

Ex2> delims의 기준이 ' '(스페이스)이니 tokens가 가르키는 두번째 녀석이 출력되겠죠.

D:\tmp>For /F "tokens=2 delims= " %A IN ("Hello Bat_file") DO echo %A

>> 결과

Bat_file

 

Ex3>delims의 기준이 ' '(스페이스)와 '_'이니 tokens가 가르키는 세번째 녀석이 출력되겠죠.

D:\tmp>For /F "tokens=3 delims=_ " %A IN ("Hello Bat_file") DO echo %A

>> 결과

file

==> 이제 슬슬 감이 오시죠..^^

 

Ex4> delims 빼면?????

D:\tmp>For /F "tokens=2" %A IN ("Hello Bat_file") DO echo %A

>> 결과

Bat_file

==> Why ???

   명령구문에 delims를 적지 않았지만, default값이 ' '(스페이스)로 정해져 있기 때문입니다.

 

Ex5> tokens 빼면?????

D:\tmp>For /F %A IN ("Hello Bat_file") DO echo %A

>> 결과

Hello

==> Why ???

  tokens를 적지 않았지만, 이것 역시 default값이 1로 정해져 있기 때문입니다.

 

 

@ 3개의 결과를 만드는 것을 보실까요.

 

D:\tmp>FOR /F "tokens=1-3 delims=- " %a IN ('date /t') DO echo %a %b %c

>> 결과
 2010 10 16

  ==> a에 "2010"이 들어가게 되고, b에 "10", c에 "16"이란 값이 들어가게 됩니다.

 

 

For에 대해서 100% 적은 것은 아닙니다. 저도 다 모르고요.

위의 내용을 이해 하면 많은 도움이 될 것이라고 생각되어 정리해봤습니다.

728x90