2012-07-10 7 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

उत्तर

14

बैच दुभाषिया पार्स समय में %MYD% मूल्यांकन करता है, और उस समय यह खाली है। यही कारण है कि आपके पास Delayed Expansion है।

echo/Date is: %MYD% 
इस के लिए

: इस लाइन को बदलें

echo/Date is: !MYD! 

और की तरह आप चाहते हैं यह कारगर होगा, क्योंकि तब यह दुभाषिया रन-टाइम में MYD मूल्यांकन करने के लिए कहता है।

+0

मुझे लगता है (लगभग) केवल समय आप वास्तव में चाहते हैं देरी विस्तार आप एक समारोह गुंजाइश के अंत में endlocal का उपयोग करने और इनलाइन करने के लिए एक मूल्य की "लौटने" की जरूरत है कर रहे हैं है। – solstice333

11

मैं अपनी स्क्रिप्ट आप क्या हासिल करना चाहते से समझ में नहीं आता है, मैं मूल विषय के लिए (पूर्णता के लिए) उत्तर: एक समारोह से लौट रहे एक मूल्य।

यहाँ कैसे मैं यह कर रहा है:

@echo off 

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

:myfunction 
set %1=filled 
goto :eof 

परिणाम है:

empty 
filled 
संबंधित मुद्दे

 संबंधित मुद्दे