2017-01-19 14 views
0

현재 디렉터리의 모든 .h 파일을 반복하고 해당 .cpp 파일의 일괄 처리 함수를 호출하고 싶습니다. 실제로 저는 이미 작동 했었지만 로컬 변수를 사용하려고했을 때 이상한 결과를 얻었습니다.루프 내에서 변수의 파일 이름을 얻는 방법은 무엇입니까?

%%~df%%~pf%%~nf.cpp이 제대로 확장
SETLOCAL 

C:\WorkingDirectory>(
SET header= 
ECHO header= 
SET source=C:\WorkingDirectory\SomeFile.cpp 
ECHO source= 
) 
header= 
source= 

하지만 ECHO %source% 인쇄 아무것도 :

SETLOCAL 

for /R %%f in (*.h) do (
    SET header=%f% 
    ECHO header=%header% 
    SET source=%%~df%%~pf%%~nf.cpp 
    ECHO source=%source% 
) 

나는이 출력을 얻을? 어떻게 정확하게 SET header=%f%을 할 수 있습니까?

+2

당신은 [지연 확장 (http://ss64.com/nt/delayedexpansion.html) – npocmaka

+1

'% f를 %'실제로 더 나은 %%'읽기 f', 또는해야한다'%% ~ 필요 f'를 사용하여 주변 인용 부호를 제거하십시오.'header '를 읽으려면'% header %'대신'! header!'를 사용해야합니다; 이 지연된 확장이 작동하려면'setlocal' 명령에'EnableDelayedExpansion' 인수를 추가하십시오 ... – aschipfl

답변

1

1) 주석 DelayedExpansion가 닫힌 괄호 블록마다 한 번을 사용하는 경우로 해석된다 일괄 적으로 필요로 @npocmaka 이미 언급 한 바와 같이 %f%하지만 %%f

2)와 액세스되지 액세스하는 변수 보통 %. 이 문제를 해결하려면 @echo off 뒤에 setlocal EnableDelayedExpansion을 추가하고 %header%!header!으로 변경하십시오. %source%도 마찬가지지만 루프 변수 %%f의 경우는 그렇지 않습니다!

SETLOCAL EnableDelayedExpansion 

for %%f in (*.h) do (
    SET header=%%~ff 
    ECHO header=!header! 
    SET source=%%~df%%~pf%%~nf.cpp 
    ECHO source=!source! 
) 
+0

실무 예제를 추가 할 수있었습니다. 나는 전체 경로를 얻기 위해'%% ~ ff'를 사용합니다. – user463035818

+0

그게 전부입니다. 다행스럽게 도울 수있어! – geisterfurz007

관련 문제