如何从批处理文件中的函数返回值?

时间:2012-07-10 17:52:43

标签: windows batch-file

我有以下批处理文件

@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     file2012-05.csv

我得到了

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

如何让函数setDate实际返回我想要的值?

2 个答案:

答案 0 :(得分:19)

批处理解释器在解析时评估%MYD%,此时它是空的。这就是你Delayed Expansion的原因。改变这一行:

echo/Date is: %MYD%

到此:

echo/Date is: !MYD!

它会像你想要的那样工作,因为它告诉解释器在运行时评估MYD

答案 1 :(得分:17)

由于我不能从你的脚本中理解你想要实现的目标,我会回答(完整性)原始主题:从函数中返回一个值。

我是这样做的:

@echo off

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

:myfunction
set %1=filled
goto :eof

结果是:

empty 
filled