본문 바로가기
IT/OS

[Windows] CMD Batch forfiles 명령어로 filename, filesize 확인하기

by 퐁시냥 2022. 6. 14.

Windows OS에서 CMD(명령프롬프트)로 Batch 파일을 작성할 때 유용한 forfiles 명령어를 소개한다. 

BAT 파일에서 forfiles 명령어를 사용하면 filename, filesize, filepath 등 파일/디렉토리에 대한 다양한 정보를 스크립트로 작성할 수 있다. 

 

1. forfiles 사용방법

명령프롬프트 실행 후 forfiles /? 를 입력하면 사용할 수 있는 옵션을 확인할 수 있다. 

별다른 설치 없이 Windows OS에서 기본적으로 지원해주는 명령어이다. 

FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

설명:
    파일(또는 파일 집합)을 선택하고 파일에 명령을
    실행합니다. 일괄 작업에 유용합니다.

매개 변수 목록:
    /P    pathname      검색을 시작할 경로를 지정합니다.
                        현재 작업 디렉터리(.)가 기본
                        폴더입니다.

    /M    searchmask    검색 마스크에 따라 파일을 검색합니다.
                        '*'이 기본 검색 마스크입니다.

    /S                  하위 폴더를 포함하도록
                        지정합니다. 예, "DIR /S"

    /C    command       각 파일에 실행할 명령을 지정합니다.
                        명령 문자열을 큰따옴표로 묶어야
                        합니다.

                        "cmd /c echo @file"이 기본 명령입니다.

                        명령 문자열에 다음 변수를 사용할 수
                        있습니다.
                        @file    - 파일 이름을 반환합니다.
                        @fname   - 확장명 없이 파일 이름을
                                   반환합니다.
                        @ext     - 파일의 확장명만
                                   반환합니다.
                        @path    - 파일의 전체 경로를 반환합니다.
                        @relpath - 파일의 상대 경로를
                                   반환합니다.
                        @isdir   - 파일 형식이 디렉터리인 경우 "TRUE"를
                                   반환하고 파일인 경우 "FALSE"를 반환합니다.
                        @fsize   - 파일의 크기(바이트)를
                                   반환합니다.
                        @fdate   - 파일을 마지막으로 수정한 날짜를
                                   반환합니다.
                        @ftime   - 파일을 마지막으로 수정한 시간을
                                   반환합니다.

                        명령줄에 특수 문자를 포함하려면
                         0xHH 형식의 16진수 코드(예, 탭은 0x09)를
                        사용하십시오. 내부 CMD.exe 명령
                        앞에는 "cmd /c"를 사용해야
                        합니다.

    /D    date          지정한 날짜와 마지막 수정한 날짜가 늦거나
                        같은(+) 또는 빠르거나 같은(-) 파일을
                        찾습니다.
                        날짜 포맷은 "yyyy-MM-dd"입니다.
                        또한 마지막 수정한 날짜가 현재 날짜에
                        "dd"일을 더한 날짜보다 늦거나 같은(+)
                         또는 현재 날짜에서 "dd"일을 뺀 날짜보다
                        작거나 같은(-) 파일을 찾습니다.
                        유효한 "dd" 범위는 0에서 32768까지입니다.
                        부호를 지정하지 않으면 "+"가 기본값입니다.

    /?                  이 도움말 메시지를 표시합니다.

 

 

2. forfiles로 filename, filesize 가져오기 

각 파일에 실행할 명령을 지정합니다. 명령 문자열을 큰따옴표로 묶어야 합니다.

forfiles /C echo @file

 

 

참고로, 명령줄에 특수 문자를 포함하려면 0xHH 형식의 16진수 코드(예, 탭은 0x09)를 사용하십시오. 내부 CMD.exe 명령 앞에는 "cmd /c"를 사용해야 합니다.

 

[FORFILES 사용 예제]

 FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 was changed 30 days ago"
    FORFILES /D 2001-01-01
             /C "cmd /c echo @fname is new since Jan 1st 2001"
    FORFILES /D +2022-6-14 /C "cmd /c echo @fname is new today"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

 

1) 파일명, 파일사이즈 가져오기 예제 1

@file @fsize 변수를 이용해서 파일명, 파일사이즈 가져오기. 

 

forfiles /C "cmd /c echo @file @fsize"
변수 설명
@file 파일 이름을 반환합니다.
@fname    확장명 없이 파일 이름을 반환합니다.
@ext 파일의 확장명만 반환합니다.
@path 파일의 전체 경로를 반환합니다.
@relpath 파일의 상대 경로를 반환합니다.
@isdir 파일 형식이 디렉터리인 경우 "TRUE"를 반환하고 파일인 경우 "FALSE"를 반환합니다.
@fsize 파일의 크기(바이트)를 반환합니다.
@fdate 파일을 마지막으로 수정한 날짜를 반환합니다.
@ftime 파일을 마지막으로 수정한 시간을 반환합니다.

 

2) 파일명, 파일사이즈 가져오기 예제 2

c:\Temp 경로에서 오늘날짜를 포함하여 오늘날짜 이후에 생성된 파일명, 파일사이즈를 가져와서 파일로 export 하기 

set TODAY=%date%
forfiles /p C:\Temp /d %TODAY% /C "cmd /c echo @file @fsize >>C:\Temp\forfiles_export.txt"

 

또한 forfiles 명령어는 변수 형태로 반환되기 때문에 배치 파일 내에서 파일명, 파일크기를 변수로 할당해서 사용할 수 있어서 편리하다. 

 

댓글