for
파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.
구문
for {%variable|%%variable} in (set) do command [ CommandLineOptions]
매개 변수
- {%variable|%%variable}
- 필수 요소입니다. 대체 가능한 매개 변수를 나타냅니다. 명령 프롬프트에서 for 명령을 실행하려면 %variable을 사용합니다. 배치 프로그램에서 for 명령을 실행하려면 %%variable을 사용합니다. 변수는 대소문자를 구분하며 %A, %B 또는 %C 같은 알파 값으로 나타내야 합니다.
- (set)
- 필수 요소입니다. 지정된 명령으로 처리하려는 둘 이상의 파일, 디렉터리, 값의 범위 또는 텍스트 문자열을 지정하며 괄호가 필요합니다.
- command
- 필수 요소입니다. 지정된 (set)에 포함된 각 파일, 디렉터리, 값의 범위 또는 텍스트 문자열에서 수행할 명령을 지정합니다.
- CommandLineOptions
- 지정된 명령과 함께 사용할 명령줄 옵션을 지정합니다.
- /?
- 명령 프롬프트에서 도움말을 표시합니다.
설명
- for 사용
for 명령은 배치 파일 내에서 사용하거나 명령 프롬프트에서 직접 사용할 수 있습니다.
- 배치 매개 변수 사용
다음과 같은 특성이 for 명령에 적용됩니다.
- for 명령은 command에서 모든 파일을 처리할 때까지 %%variable 또는 %variable을 지정된 set의 각 텍스트 문자열로 대체합니다.
- for variable 이름은 대소문자를 구분하고 전역 변수이며 한 번에 총 52개 이상을 사용할 수 없습니다.
- %0부터 %9 사이의 배치 매개 변수와 충돌하지 않게 하려면 0부터 9까지의 숫자를 제외한 모든 문자를 variable에 사용할 수 있습니다. 간단한 배치 파일에서는 %%f와 같은 단일 문자로 충분합니다.
- 복잡한 배치 파일에서는 대체 가능한 다른 변수들과 구분하기 위해 variable에 여러 값을 사용할 수 있습니다.
- 파일 그룹 지정
set 매개 변수는 단일 파일 그룹이나 여러 파일 그룹을 나타낼 수 있습니다. 와일드카드(* 및 ?)를 사용하여 파일 집합을 지정할 수 있습니다. 다음은 유효한 파일 집합입니다.
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
for 명령을 사용할 때 set의 첫째 값이 %%variable 또는%variable을 대체한 다음 지정된 명령을 수행하여 이 값을 처리합니다. set 값에 해당하는 모든 파일이나 파일 그룹이 처리될 때까지 이 과정은 계속됩니다.
- in과 do 키워드 사용
in과 do는 매개 변수는 아니지만 for 명령에 필요합니다. 이 키워드 중 하나를 생략하면 오류 메시지가 나타납니다.
- for의 추가 형식 사용
명령 확장을 사용하면(기본값) 다음과 같은 for 명령의 추가 형식이 지원됩니다.
- 디렉터리 전용
set에 와일드카드(* 및 ?)를 포함하면 지정된 command는 지정된 디렉터리의 파일 집합 대신 set과 일치하는 각 디렉터리에 대해 실행됩니다. 구문은 다음과 같습니다.
for /D {%% | %}variable in (set) do command [CommandLineOptions]
- 재귀적 사용
[Drive:]Path에서 시작하는 디렉터리 트리를 검색하고 트리의 각 디렉터리에서 for 문을 실행합니다. /R 다음에 디렉터리를 지정하지 않으면 현재 디렉터리로 간주됩니다. set에 마침표(.) 하나만 있으면 디렉터리 트리를 열거만 합니다. 구문은 다음과 같습니다.
for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]
- 값의 범위 반복
반복 변수를 사용하여 시작 값(start#)을 설정한 다음 값이 집합의 종료 값(end#)을 초과할 때까지 값의 집합 범위를 단계적으로 검사합니다. /L 은 start#와 end#를 비교하여 반복을 실행합니다. start#가 end#보다 작으면 명령이 실행됩니다. 반복 변수가 end#를 초과하면 명령 셸은 루프를 종료합니다. 또한 음의 step#을 사용하면 값을 줄이면서 범위를 단계적으로 검사할 수 있습니다. 예를 들어, (1,1,5)는 시퀀스 1 2 3 4 5를 생성하고 (5,-1,1)은 시퀀스 (5 4 3 2 1)을 생성합니다. 구문은 다음과 같습니다.
for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]
- 반복 및 파일 구문 분석
파일 구문 분석을 사용하여 명령 출력, 문자열 및 파일 내용을 처리합니다. 반복 변수를 사용하여 검사할 내용이나 문자열을 정의하고 다양한 ParsingKeywords 옵션을 사용하여 구문 분석을 더 자세히 수정합니다. ParsingKeywords 옵션을 사용하여 반복 변수로 전달할 토큰을 지정합니다. token 옵션 없이 사용하면 /F는 첫째 토큰을 검사만 합니다.
파일 구문 분석을 출력하고 문자열이나 파일 내용을 읽고 개별 텍스트 줄로 분리한 다음 각 줄을 0개 이상의 토큰으로 구문 분석하는 과정으로 이루어집니다. 그런 다음 반복 변수 값을 토큰으로 설정하여 for 루프를 호출합니다. 기본적으로 /F는 각 파일의 각 줄에서 처음 공백으로 분리된 토큰을 전달하며 빈 줄은 건너뜁니다. 다른 구문은 다음과 같습니다.
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]
filenameset 인수는 하나 이상의 파일 이름을 지정합니다. filenameset의 다음 파일로 진행하기 전에 각 파일을 열어서 읽고 처리합니다. 기본 구문 분석 동작을 무시하려면 "ParsingKeywords"를 지정합니다. 이것은 다른 구문 분석 옵션을 지정하는 하나 이상의 키워드를 포함하는 따옴표 붙은 문자열입니다.
usebackq 옵션을 사용하는 경우에는 다음 구문 중 하나를 사용하십시오.
for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]
for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]
다음 표에서는 ParsingKeywords에 사용할 수 있는 구문 분석 키워드 목록을 보여 줍니다.
키워드 |
설명 |
eol=c |
줄의 끝 문자(한 개의 문자만)를 지정합니다. |
skip=n |
파일의 시작 위치에서 건너뛸 줄 수를 지정합니다. |
delims=xxx |
구분 기호 집합을 지정합니다. 이 집합은 공백과 탭의 기본 구분 기호 집합을 대체합니다. |
tokens=x,y,m-n |
각 반복에 대해 for 본문으로 전달할 각 줄의 토큰을 지정합니다. 따라서 추가 변수 이름이 할당됩니다. m-n 형식은 m부터 n 사이 토큰을 지정하는 범위입니다. tokens= 문자열의 마지막 문자가 별표(*)이면 추가 변수가 할당되고 마지막으로 구문 분석한 토큰 뒤에 줄에 남아 있는 텍스트를 받습니다. |
usebackq |
따옴표를 사용하여 filenameset에 파일 이름을 인용하고 따옴표 분은 문장 내 문자열을 명령으로 실행하며, 작은 따옴표 내 문자열은 리터럴 문자열 명령이 되도록 지정합니다. |
- 변수 대체
for 변수 참조를 위한 대체 수정자가 개선되었습니다. 다음 표에서는 변수 I에 대한 옵션 구문 목록을 보여 줍니다.
수정자가 있는 변수 |
설명 |
%~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 |
dir과 같은 출력 줄로 %I을 확장합니다. |
위의 예제에서 %I과 PATH는 다른 유효한 값으로 바꿀 수 있습니다. 유효한 for 변수 이름은 %~ syntax를 종료합니다.
%I 같은 대문자 변수 이름을 사용하면 코드를 더 읽기 쉽게 만들고 대소문자를 구분하지 않는 수정자와 혼동을 피할 수 있습니다.
- 문자열 구문 분석
괄호 사이에 있는 filenameset에 작은 따옴표('filenameset')를 사용하면 해당 문자열에서 for /F 구문 분석 로직을 사용할 수 있습니다. Filenameset은 파일에서 한 줄의 입력으로 처리되며 구분 분석됩니다.
- 출력 구문 분석
for /F 명령을 사용하면 괄호 사이의 filenameset에 억음 악센트 기호를 사용하여 명령 출력을 구문 분석할 수 있습니다. 이것은 하위 Cmd.exe로 전달되는 명령줄로 처리되고 출력은 메모리에 캡처되어 파일처럼 구문 분석됩니다.
예제
배치 파일에서 for 명령을 사용하려면 다음 구문을 사용하십시오.
for %%variable in (set) do command [CommandLineOptions]
대체할 수 있는 변수 %f를 사용하여 현재 디렉터리에 확장명이 .doc나 .txt인 모든 파일의 내용을 표시하려면 다음을 입력하십시오.
for %f in (*.doc *.txt) do type %f
위의 예제에서 확장명이 .doc나 .txt인 현재 디렉터리의 각 파일은 모든 파일의 내용이 표시될 때까지 %f 변수로 대체됩니다. 배치 파일에서 이 명령을 사용하려면 모든 %f 를 %%f로 바꾸십시오. 그렇지 않으면 변수는 무시되고 오류 메시지가 표시됩니다.
주석 처리된 줄을 무시하고 파일을 구문 분석하려면 다음을 입력하십시오.
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
이 명령은 Myfile.txt 파일에서 세미콜론으로 시작하는 줄은 무시하고 각 줄을 구문 분석하여 각 줄에서 두 번째와 세 번째 토큰을 FOR 본문으로 전달합니다. 이 때 토큰은 쉼표나 공백으로 구분됩니다. FOR 문의 본문은 %i를 참조하여 두 번째 토큰을 얻고, %j를 참조하여 세 번째 토큰을 얻으며, %k를 참조하여 세 번째 이후의 나머지 토큰을 모두 얻습니다. 제공한 파일 이름에 공백이 있으면 텍스트에 따옴표를 사용하십시오(예: "File Name"). 따옴표를 사용하려면 usebackq를 사용해야 합니다. 그렇지 않으면 따옴표는 구문 분석할 리터럴 문자열로 해석됩니다.
%i는 FOR 문에서 명시적으로 선언되고 %j와 %k는 tokens= 옵션을 사용하여 함축적으로 선언됩니다. 문자 'z'나 'Z'보다 큰 변수를 선언하지 않는다는 조건으로 tokens=를 사용하면 토큰은 최대 26개까지 정의할 수 있습니다.
괄호 사이에 filenameset을 넣어 명령 출력을 구문 분석하려면 다음을 입력하십시오.
for /F "usebackq delims==" %i IN (`set`) DO @echo %i
이 예제는 현재 환경의 환경 변수 이름을 열거합니다.
서식 범례
서식 |
의미 |
기울임꼴 |
사용자가 제공해야 하는 정보 |
굵게 |
사용자가 보이는 대로 정확하게 입력해야 하는 요소 |
줄임표(...) |
명령줄에서 여러 번 반복되는 매개 변수 |
대괄호([]) |
옵션 항목 |
중괄호({}) 또는 세로줄(|)로 구분된 선택 항목예: {even|odd} |
사용자가 하나만 선택할 수 있는 일련의 선택 사항 |
Courier 글꼴 |
코드 또는 프로그램 출력 |
관련 항목