본문으로 바로가기

[Window] 명령어를 통한 압축구현

category Language/Window 2020. 6. 20. 00:32

cmd 명령어 중 forfiles와 zip.exe를 통해 다양한 형태로 파일을 압축할 수있다.

 

[FORFILES] * cmd에서 forfiles /? 입력시 아래와 같은 도움말 정보를 확인 할 수 있다.

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까지입니다.
                        부호를 지정하지 않으면 "+"가 기본값입니다.

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

예:
    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 +2020-6-20 /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"

 

FORFILES 명령어는 다양한 정보의 파일들을 검색하는데 있어서 도움을 주는데, 특히 LOG파일과 같이 많은 text파일이 생성되어 삭제가 필요할 경우에도 해당 명령어를 활용하여 검색, 제거가 가능하다.

 

이번에는 특정 파일명이 포함된 파일을 원하는 경로로 압축 후 압축된 파일은 제거하는 cmd 명령어를 찾아보았다.

 

* zip.exe가 내장되어있지 않은 경우 구글에서 검색 후 다운로드 해야하며,

  c:\window\system32에 넣어두는게 추후 명령어 사용에도 편리하다.

 

아래의 예시문은 upload폴더안에 있는 파일중, 202001이 포함된 파일을 압축 후 ddddd폴더로 이동하는 예시문이다.

*-rm명령어를 사용하면 압축대상 파일은 압축된 후 삭제된다.

forfiles /p c:\backupTest\tomcat_source\ROOT\upload /M 202001* 
/c "cmd /c C:\zip.exe -rm c:\ddddd/@file.zip @file"

 

이와같이 comman line 명령어를 활용 하여 bat프로그램을 만든다면 파일을 정리할때 용이하게 사용할 수 있다.

예시와 같은 파일명 검색이 아닌 파일이 수정된 날짜를 기준으로도 처리가 가능한데,

해당부분은 구글 검색 시 많은 정보를 얻을 수 있으니 참조하셔서 작업해보시길..