2012-07-10 93 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含 file2012-05.csv

我得到

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

如何真正得到函數的setDate返回我想要的價值?

+0

我想返回%NAME%。我正在嘗試使用%1,並忘記將其更改回來。我已經將代碼更改回原來的版本,仍然無法正常工作。 – AnthonyM 2012-07-10 18:11:57

回答

14

批處理解釋器在解析時評估%MYD%,此時它是空的。這就是爲什麼你有Delayed Expansion。改變這一行:

echo/Date is: %MYD% 

這樣:

echo/Date is: !MYD! 

,它會像你想要的,因爲那時它告訴解釋在運行時間評估MYD

+0

我想(幾乎)你真正想要延遲擴展的唯一時間是如果你在函數作用域的末尾使用endlocal,並且需要內聯「返回」值。 – solstice333 2017-08-02 17:01:52

11

由於我不明白你的腳本你想達到什麼目的,我回復(爲了完整性)原始主題:從函數返回一個值。

這是我如何做到這一點:

@echo off 

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

:myfunction 
set %1=filled 
goto :eof 

結果是:

empty 
filled 
相關問題