2012-07-10 2 views
9

나는 다음과 같은 배치 파일을배치 파일의 함수에서 값을 반환하려면 어떻게해야합니까?

@echo off 
setlocal EnableDelayedExpansion 
for /f "delims==" %%J in (File_List.txt) do (
call :setDate %%J MYD 
echo/Date is: %MYD% 
) 
endlocal &goto :eof 

:setDate 
SETLOCAL ENABLEEXTENSIONS 
echo %1 
echo %~2 
set NAME=%1 
set NAME=%NAME:~-11% 
echo %NAME% 
echo %~2 
endlocal&set %2=%NAME%&goto :eof 

을 가지고 있지만 File_List.txt와 어떻게 실제로 반환하는 기능하여 setDate를받을 수 있나요

file2012-05.csv 
MYD 
2012-05.csv 
MYD 
Date is: 

을 얻을 file2012-05.csv

포함 내가 원하는 가치?

+0

내가 % NAME % 님을 반환합니다. % 1을 (를) 실험 중이었고 % 1을 (를) 다시 변경하는 것을 잊었습니다. 코드를 원래 버전으로 변경했지만 여전히 작동하지 않습니다. – AnthonyM

답변

14

구문 해석기에서 일괄 처리기는 %MYD%을 평가하며 그 시간은 비어 있습니다. 그래서 Delayed Expansion입니다. 다음은 실행시 MYD을 평가하는 인터프리터를 알려주기 때문에,

echo/Date is: !MYD! 

당신이 원하는 것처럼 작동합니다 : 이것에

echo/Date is: %MYD% 

:이 줄을 변경합니다.

+0

함수 확장의 끝에서 endlocal을 사용하고 값의 "반환"을 인라인해야하는 경우 (거의) 지연 확장을 정말로 원한다고 가정합니다. – solstice333

11

성취하고자하는 것을 스크립트에서 이해할 수 없기 때문에 원래 주제에 대해 회신합니다 (완전성을 위해). 함수에서 값을 반환합니다. 여기

내가 그것을 할 방법은 다음과 같습니다

@echo off 

set myvar= 
echo %myvar% 
call :myfunction myvar 
echo %myvar% 
goto :eof 

:myfunction 
set %1=filled 
goto :eof 

결과는 다음과 같습니다

empty 
filled 
관련 문제