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
I was senseless and ignorant; I was a brute beast before you.
Yet I am always with you; you hold me by my right hand.
You guide me with your counsel, and afterward you will take me into glory.
Whom have I in heaven but you?
I only have you in my life
by Daniel