无法从批处理文件中的函数返回变量

时间:2017-09-18 13:04:03

标签: batch-file

我有一个函数,它将创建一个带有时间戳的目录,但是当我尝试返回创建的目录时,我得到一个空值 这是函数

:createdatetime
SETLOCAL ENABLEEXTENSIONS
echo %1
cd C:\somefolder
set hh=%time:~-11,2%
set /a hh=%hh%+100
set hh=%hh:~1%
set mydir=%date:~10,4%-%date:~4,2%-%date:~7,2%-%hh%-%time:~3,2%-%time:~6,2%
set globalvar=try_%1_%mydir% 
mkdir try_%1_%mydir%
set %~2=try_%1_%mydir%
echo %globalvar%
goto:eof

这就是我的称呼方式      call:createdatetime %% i var2      echo%var2% 但即使在所需文件夹中创建了目录,我得到的只是一个空白值 请让我知道我错过了什么。 提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你的函数的goto:eof意味着一个endlocal。

然后丢弃局部变量。

要传回一个变量,你必须在与明确的endlocal命令相同的行/上下文中使用set命令。

:createdatetime
SETLOCAL ENABLEEXTENSIONS
echo %1
cd C:\somefolder
set hh=%time:~-11,2%
set /a hh=%hh%+100
set hh=%hh:~1%
set mydir=%date:~10,4%-%date:~4,2%-%date:~7,2%-%hh%-%time:~3,2%-%time:~6,2%
set globalvar=try_%1_%mydir% 
mkdir try_%1_%mydir%
endlocal & set %~2=try_%1_%mydir%
goto:eof