배치파일 for문에서 에서 폴더 안의 파일명 가져오기

Posted at 2014/04/09 08:20 // in Programming // by Daniel
setlocal enabledelayedexpansion
for /r %%I in (*) do (
  @REM echo %%~nxI
  set _CMDL=!_CMDL! %%~nxI
  )
endlocal&set CMDLINE=%_CMDL%
enabledelayedexpansion 을 써서 for문 안에서 변수가 갱신되도록 한다. (_CMDL) 이때는 %대신 !를 써서 표시.
%%~nxI - 파일의 이름과 확장자 (for /?로 확인 가능)

 %~I         - 따옴표(")를 제거하는 %I을 확장합니다.
 %~fI        - %I을 정규화된 경로 이름으로 확장합니다.
 %~dI        - %I을 드라이브 문자로만 확장합니다.
 %~pI        - %I을 경로로만 확장합니다.
 %~nI        - %I을 파일 이름으로만 확장합니다.
 %~xI        - %I을 파일 확장명으로만 확장합니다.
 %~sI        - 확장된 경로가 짧은 이름만 가지고 있습니다.
 %~aI        - %I이 파일의 파일 속성으로만 확장합니다.
 %~tI        - %I을 파일의 날짜/시간으로만 확장합니다.
 %~zI        - %I을 파일 크기로만 확장합니다.
 %~$PATH:I   - PATH 환경 변수 목록에 있는
                디렉터리를 찾고 %I을 처음으로 찾은
                정규화된 이름으로 확장합니다.
                환경 변수 이름이 정의되지 않았거나
                찾기에서 파일을 찾지 못하면
                이 구문에서 빈 문자열로
                확장합니다
위의 구문은 여러 가지 결과를 얻기 위해 결합될 수 있습니다.

   %~dpI       - %I을 드라이브 문자와 경로로만 확장합니다.
   %~nxI       - %I을 파일 이름과 확장명으로만 확장합니다.
   %~fsI       - %I 을 짧은 이름을 가진 전체 경로 이름으로만 확장합니다.
   %~dp$PATH:i - %I에 대한 PATH 환경 변수 목록에 있는
                  디렉터리를 찾고 처음 찾은 것의
                  드라이브 문자와 경로로 확장합니다.
   %~ftzaI     - %I을 출력줄과 같은 DIR로 확장합니다.

위의 예제에서 %I과 PATH는 다른 유효한 값으로 바뀔 수 있습니다.
%~ 구문은 유효한 FOR 변수 이름으로 종료됩니다.
%I와 같은 대문자 변수 이름을 선택하면 쉽게 읽을 수 있으며
대/소문자를 구분하지 않는 구문에서 혼동을 피할 수 있습니다.
아래 스크립트(함수)는 인자로 주어진 폴더로 부터 모든 파일명들을 가져다가 폴더명과 함께 붙여 커맨드라인을 만드는 스크립트입니다.
:SET_SUBFOLDER_FILES_CMDLINE
@REM get sub folder files

@echo off
setlocal enabledelayedexpansion
set _CMDL=
for %%f in (%*) do (
for /r %%I in (%%f\*.arxml) do (
  @REM echo %%~nxI
  set _CMDL=!_CMDL! %%f/%%~nxI
  )
)
endlocal&set CMDLINE=%_CMDL%
@REM echo %CMDLINE%

goto:eof
크리에이티브 커먼즈 라이센스
Creative Commons License

이 글에는 트랙백을 보낼 수 없습니다