20

我有以下批处理文件

@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 返回我想要的值?

4

2 回答 2

29

由于我从您的脚本中不明白您想要实现什么,因此我(为了完整性)回复原始主题:从函数返回一个值。

这是我的做法:

@echo off

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

:myfunction
set %1=filled
goto :eof

结果是:

empty 
filled
于 2015-06-08T14:32:12.703 回答
21

批处理解释器在解析时进行评估%MYD%,当时它是空的。这就是您延迟扩展的原因。更改此行:

echo/Date is: %MYD%

对此:

echo/Date is: !MYD!

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

于 2012-07-10T18:16:44.097 回答