2011-04-22 3 views
4

디렉토리에 모든 파일 이름을 가져 오는 스크립트를 작성하고 파일 이름 끝을 모두으로 제외하고 싶습니다.루프에서 로컬 변수의 부분 문자열을 얻는 방법은 무엇입니까?

나는 아래 스크립트를 생각해 냈지만 작동하지 않습니다. 아무도 도와 줄 수 있습니까?

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf 
    if not %CURRENT_TESTCASE:~-3%==all (
     echo %%~nf >> "%FILELIST%" 
    ) 
) 

답변

7

CURRENT_TESTCASE 변수는 루프의 본문이 실행되기 전에 평가됩니다. (명령 프로세서가 괄호가 포함 된 복합 명령을 처리하는 방법입니다.)

변수가 중간에 평가되지 않도록하려면 변수의 로컬로 delayed expansion을 활성화하고 구문을 약간 변경해야합니다. 방법은 다음과 같습니다.

for /R "%SOME_DIRECTORY%" %%f in (*.testcase) do (
    set CURRENT_TESTCASE=%%~nf 
    setlocal EnableDelayedExpansion 
    if not !CURRENT_TESTCASE:~-3!==all (
     echo %%~nf >> "%FILELIST%" 
    ) 
    endlocal 
) 
+0

* 루프 밖에서 *해야하지 않습니까? 아니면 내부에도 있다면 작동합니까? – Mehrdad

+2

스크립트의 모든 부분에 지연 확장을 활성화/비활성화 할 수 있습니다. 필요하지 않은 곳에서 예상치 않게'!'를 사용하지 않도록 작업 범위를 제한하는 것이 바람직합니다. –

+0

@Mehrdad : 작동합니다, 감사합니다. – eric2323223

관련 문제