batch-file
배치 파일의 For 루프
수색…
통사론
- / l %% p in (startNumber, increment, endNumber) do 명령
- / f %% p in (filename) 명령을 입력하십시오.
- / f %% p in ( "textStrings") do 명령의 경우
- / f %% p in ( 'command') 명령에 대해
- / r 드라이브의 경우 : \ path %% p in (set) do 명령
- / d %% p in (directory) 명령을 입력하십시오.
비고
for
명령은 /f
플래그가 사용될 때 옵션을 승인합니다. 다음은 사용할 수있는 옵션 목록입니다.
delims=x
토큰을 구분하는 분리 문자 (들)skip=n
파일 및 텍스트 문자열의 시작 부분에서 건너 뛸 줄 수eol=;
주석을 나타 내기 위해 각 줄의 시작 부분에있는 문자tokens=n
처리 할 각 줄 또는 문자열에서 읽은 번호 매기기 항목usebackq
다른 인용 스타일을 사용하십시오 :"파일"의 긴 파일 이름에는 큰 따옴표를 사용하십시오.
'textStrings'에 작은 따옴표 사용
`command`에 역 인용 부호 사용
파일 세트의 각 줄 반복
다음은 C:\scripts\testFile.txt
파일의 각 행을 표시합니다. 빈 줄은 처리되지 않습니다.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
고급 예제에서는 FOR 루프에서 파생 된 제한된 파일 집합 데이터를 사용하여 검색된 내용을 파일에 저장하면서 일괄 처리를 리디렉션하는 방법을 보여줍니다.
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
명령 문자열이 여러 코드 행으로 분할되는 기간과 명령 그룹은 괄호로 구분됩니다.
디렉토리 트리에서 재귀 적으로 디렉터리 방문
for /r
명령을 사용하면 디렉터리 트리의 모든 디렉터리를 반복적으로 방문하고 명령을 수행 할 수 있습니다.
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
노트:
- / r - 파일을 반복합니다 (하위 폴더 되풀이).
- pushd - 현재 디렉토리 / 폴더를 변경하고 POPD 명령이 사용할 이전 폴더 / 경로를 저장합니다.
- popd - PUSHD 명령으로 가장 최근에 저장된 경로 / 폴더로 디렉토리를 다시 변경합니다.
현재 디렉토리의 모든 파일 이름 바꾸기
다음은 for
루프와 함께 변수를 사용하여 파일 그룹의 이름을 바꿉니다.
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
변수 이름 %%j
을 정의하고이를 모든 현재 파일 (*.*)
과 연관 시키면 for
루프의 변수를 사용하여 현재 디렉토리의 각 파일을 나타낼 수 있습니다.
루프를 반복 할 때마다 (또는 패스) 정의 된 그룹 (동일한 그룹 일 수 있습니다. 예 : *.jpg
또는 *.txt
)의 다른 파일을 처리합니다.
첫 번째 예에서는 텍스트를 "old"텍스트 문자열 대신 "new"라는 텍스트 문자열로 대체합니다 (텍스트 "old"가 파일 이름에있는 경우에만 해당).
두 번째 예에서는 텍스트를 추가합니다. 텍스트 "접두어"가 파일 이름의 시작 부분에 추가됩니다. 이것은 대용품이 아닙니다. 이 변경 사항은 그룹의 모든 파일에 적용됩니다.
세 번째 예제에서는 다시 텍스트를 추가합니다. 텍스트 "접미사"가 파일 이름의 끝에 추가됩니다. 다시 말하지만, 이것은 대체가 아닙니다. 이 변경 사항은 그룹의 모든 파일에 적용됩니다.
마지막 줄은 실제로 이름 바꾸기를 처리합니다.
되풀이
for /L %%A in (1,2,40) do echo %%A
이 행은 1에서 39까지 반복되며 매번 2 씩 증가합니다.
첫 번째 매개 변수 인 1
은 시작 번호입니다.
두 번째 매개 변수 인 2
는 증가분입니다.
세 번째 매개 변수 인 40
이 최대 값입니다.