我有以下批处理文件
@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实际返回我想要的值?
答案 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