윈도우 CMD forfiles

영쓰꼼수노트·2023년 6월 30일

batch

목록 보기
1/1
post-thumbnail

forfiles

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

사용목적

일정날짜 이후에 수정된 프로젝트 소스파일을 파일 경로대로 복사하고자 사용함.

사용법(기본)

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

  • 매개 변수 목록:

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

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

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

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

      			"cmd /c echo @file"이 기본 명령입니다.
      			명령 문자열에 다음 변수를 사용할 수
      			있습니다.
      			@file    - 파일 이름을 반환합니다.
      			@fname   - 확장명 없이 파일 이름을
      					   반환합니다.
      			@ext     - 파일의 확장명만
      					   반환합니다.
      			@path    - 파일의 전체 경로를 반환합니다.
      			@relpath - 파일의 상대 경로를
      					   반환합니다.
      			@isdir   - 파일 형식이 디렉터리인 경우 "TRUE"를
      					   반환하고 파일인 경우 "FALSE"를 반환합니다.
      			@fsize   - 파일의 크기(바이트)를
      					   반환합니다.
      			@fdate   - 파일을 마지막으로 수정한 날짜를
      					   반환합니다.
      			@ftime   - 파일을 마지막으로 수정한 시간을
      					   반환합니다.
      
      			명령줄에 특수 문자를 포함하려면
      			 0xHH 형식의 16진수 코드(예, 탭은 0x09)를
      			사용하십시오. 내부 CMD.exe 명령
      			앞에는 "cmd /c"를 사용해야
      			합니다.
  1. /D date 지정한 날짜와 마지막 수정한 날짜가 늦거나
    같은(+) 또는 빠르거나 같은(-) 파일을
    찾습니다.
    날짜 포맷은 "yyyy-MM-dd"입니다.
    또한 마지막 수정한 날짜가 현재 날짜에
    "dd"일을 더한 날짜보다 늦거나 같은(+)
    또는 현재 날짜에서 "dd"일을 뺀 날짜보다
    작거나 같은(-) 파일을 찾습니다.
    유효한 "dd" 범위는 0에서 32768까지입니다.
    부호를 지정하지 않으면 "+"가 기본값입니다.
    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 +2023-6-16 /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"

테스트 소스(batch)

  • C:\Git 폴더 내에 입력 날짜 이후 수정된 파일을 C:\Source에 경로에 맞추어 복사
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@echo off
rem 환경변수 딜레이 설정 (선언한 변수가 갱신되는 값이 적용되도록 함)
setlocal enabledelayedexpansion
set cnt=0
set /p copyDate=기준일자 입력(yyyy-mm-dd) ?
for /"tokens=1-6 delims=;" %%a in ('forfiles /p C:\Git /s /d +!copyDate! /c "cmd /c echo @path;@relpath;@file;@fdate;@ftime;@isdir;"') do (
set relpath=%%b
set file=%%c
set fdate=%%d
set ftime=%%e
set check=%%f
rem relpath > .\Study\Vue\Vue.md 상대경로 값으로 fdir 값 세팅 (:~2 의미 ? 2번째
set fdir=!relpath:~2!
call :mkdir
rem 대상경로 없을경우 md 명령어로 복사할 위치의 경로 생성
if not exist C:\Source!fdir! md C:\Source!fdir!
if "!check!" equ "FALSE" copy /y %%a C:\Source!fdir! > nul
if "!check!" equ "FALSE" set /a cnt=!cnt!+1
if "!check!" equ "FALSE" echo !cnt!!fdate! !ftime! / !file!
)
rem fdir이 "\Study\README.md" 로 되어있는경우 파일명(README.md)앞의 \까지 반복하여 뒤에서부터 문자열을 삭제하도록함. mkdir 결과 : "Study\"
:mkdir
if "!fdir:~-1!"=="\" goto :eof
set fdir=!fdir:~0,-1!
goto mkdir
cs
profile
개발 꼼수 노트 쌓는 중.

0개의 댓글