본문 바로가기
놀기/잡스러운 것

[batch] 파일 목록 출력 (이름만, 확장자 제거, 전체 경로)

by Hi~ 2022. 5. 22.

목차

     

    항상은 아니지만 가끔 사용하는 batch 파일. 그렇다고 머리에 넣기에는 애매하다. 

    이런 것은 그냥 필요할 때 찾아보는 것이 최고!!

     

    파일 목록에 대한 처리는 파일 목록을 보여주는 dir 명령어와 for loop 문법으로 해결할 수 있다.

    dir의 옵션은 dir /? 로 확인할 수 있다.

     

    E:\busyman\batch\test001>dir /?
    디렉터리에 있는 파일과 하위 디렉터리 목록을 보여 줍니다.

    DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
      [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

      [drive:][path][filename]
                  목록에 추가할 드라이브, 디렉터리 및/또는 파일을 지정합니다.

      /A          지정된 특성을 가진 파일을 보여 줍니다.
      attributes   D  디렉터리                R  읽기 전용 파일
                   H  숨김 파일               A  보관할 파일
                   S  시스템 파일               I  콘텐츠가 인덱싱되지 않은 파일
                   L  재분석 지점             O  오프라인 파일
                   -  부정을 뜻하는 접두사
      /B          최소 포맷을 사용합니다(머리말 정보나 요약 없음)
      /C          파일 크기에 천 단위 구분 기호를 보여 줍니다.  이것은 기본값
                  입니다. 구분 기호를 표시하지 않으려면 /-C를 사용하십시오.
      /D          가로 목록과 동일하지만 파일 목록을 세로로 정렬하여 보여 줍니다.
      /L          소문자를 사용합니다.
      /N          파일 이름이 제일 오른쪽에 오도록 새로운 긴 목록 포맷을 사용합니다.
      /O          파일을 정렬된 순서로 보여 줍니다.
      sortorder    N  이름순(알파벳순)       S  크기순(가장 작은 항목부터)
                   E  확장명순(알파벳순)  D  날짜/시간순(가장 오래된 항복부터)
                   G  그룹 디렉터리 먼저    -  순서를 반대로 하는 접두사
      /P          정보가 한 화면에 꽉 차면 잠깐 멈춥니다.
      /Q          파일 소유자를 보여 줍니다.
      /R          파일의 대체 데이터 스트림을 표시합니다.
      /S          지정한 디렉터리와 하위 디렉터리를 포함하여 보여 줍니다.
      /T          정렬에 사용할 시간 필드를 지정합니다
      timefield   C  작성한 시간
                  A  마지막 액세스한 시간
                  W  마지막 기록한 시간
      /W          가로 목록 형식을 사용합니다.
      /X          8dot3 파일 이름이 아닌 파일에 대한 짧은 이름을 보여 줍니다
                  이 형식은 긴 이름 앞에 짧은 이름이 추가된 것으로 /N 포맷과
                  같습니다. 짧은 이름이 없으면
                  공백을 보여 줍니다.
      /4          4자릿수 연도를 표시합니다.

    스위치를 DIRCMD 환경 변수로 미리 설정할 수 있습니다. 하이픈(-)을
    스위치 앞에 접두사로 붙이면 미리 설정된 스위치를 재정의합니다(예, /-W).

     

    이제 예제 들어 갑니다.

     

     

    1. 현재 디렉터리의 파일 목록 출력 (확장자를 포함한 파일 이름)


    @echo off
    
    (for /f %%a in ('dir /b /a-d') do (
    	echo %%a
    ))

     

     

    2. 현재 디렉터리의 파일 목록 출력 (확장자를 제거한 파일 이름만)


    @echo off
    
    (for /f %%a in ('dir /b /a-d') do (
    	echo %%~na
    ))

     

     

    3. 현재 디렉터리의 파일 목록 출력 (경로 포함)


    @echo off
    
    (for /f %%a in ('dir /b /a-d') do (
    	echo %%~fa
    ))

     

     

    4. 기타 예제 들


    사실 옵션들이 많은데 그때그때 찾아 쓰는 입장이라 검색을 통해 다양한 예제를 찾을 수 있음을 다들 아니 ㅎㅎ 그냥 여기서 마무리..

     

    Variable with modifier  Description
    
    %~I                     Expands %I which removes any surrounding 
                            quotation marks ("").
    %~fI                    Expands %I to a fully qualified path name.
    %~dI                    Expands %I to a drive letter only.
    %~pI                    Expands %I to a path only.
    %~nI                    Expands %I to a file name only.
    %~xI                    Expands %I to a file extension only.
    %~sI                    Expands path to contain short names only.
    %~aI                    Expands %I to the file attributes of file.
    %~tI                    Expands %I to the date and time of file.
    %~zI                    Expands %I to the size of file.
    %~$PATH:I               Searches the directories listed in the PATH environment 
                            variable and expands %I to the fully qualified name of 
                            the first one found. If the environment variable name is 
                            not defined or the file is not found by the search,
                            this modifier expands to the empty string.

     

    여러 사이트를 참조하면 좋은 batch 파일을 만들 수 있다.

     

    http://www.ericphelps.com/batch/lists/filelist.htm

     

    Creating and Processing Lists of File Names

    set filename= @echo off  :START  copy fragment.txt + filelist.txt temp.txt > nul  type temp.txt | find "set filename=" > temp.bat echo call process.bat >> temp.bat call temp.bat  type temp.txt | find /v "set filename=" > filelist.txt  copy filelist.tx

    www.ericphelps.com

     

    https://stackoverflow.com/questions/3215501/batch-remove-file-extension

     

    Batch: Remove file extension

    I have the following batch script from Wikipedia: @echo off for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do ( echo %%f ) pause In the for-loop all files with the extension flv get echoed...

    stackoverflow.com

     

     

     

     

    댓글