हां, आपको सेटलोकल का उपयोग करना चाहिए। यह किसी भी बदलाव को स्थानीयकृत करेगा जैसे कि एंडलोकल जारी होने के बाद पुराना वातावरण बहाल किया जाएगा।
जब सभी स्क्रिप्ट प्रोसेसिंग समाप्त हो जाती है और आपको कमांड लाइन संदर्भ में वापस कर दिया जाता है, तो प्रत्येक सक्रिय सेटलोकल के लिए एक अंतर्निहित अंतराल जारी किया जाता है। स्पष्ट रूप से एंडलोकल जारी करने की कोई आवश्यकता नहीं है।
इसके अलावा, यदि आपकी स्क्रिप्ट (या दिनचर्या) कॉल की जाती है, तो जब कॉल पूरा हो जाता है तो कॉल किए गए दिनचर्या में जारी किए गए प्रत्येक सक्रिय सेटलोकल के लिए एक अंतर्निहित अंतराल होता है।
एक बुलाया दिनचर्या के भीतर
var=pre-CALL value
var=within CALL value
var=pre-CALL value
ENDLOCAL एक रोलबैक कभी नहीं होगा: उदाहरण के लिए एक नियमित के अंत में ENDLOCAL डाल करने के लिए, (हालांकि यह चोट नहीं करता है)
@echo off
set var=pre-CALL value
echo var=%var%
call :test
echo var=%var%
exit /b
:test
setlocal
set var=within CALL value
echo var=%var%
exit /b
उत्पादन की आवश्यकता नहीं है सेटलोकल जिसे कॉल से पहले जारी किया गया था। उदाहरण के लिए।
@echo off
setlocal
set var=VALUE 1
setlocal
set var=VALUE 2
echo before call: var=%var%
call :test
echo after call: var=%var%
endlocal
echo after endlocal: var=%var%
exit /b
:test
setlocal
set var=VALUE 3
echo within local CALL context: var=%var%
endlocal
echo within CALL after 1st endlocal: var=%var%
endlocal
echo within CALL cannot endlocal to before CALL state: var=%var%
exit /b
परिणाम: जब निष्पादन पूरा करता
before call: var=VALUE 2
within local CALL context: var=VALUE 3
within CALL after 1st endlocal: var=VALUE 2
within CALL cannot endlocal to before CALL state: var=VALUE 2
after call: var=VALUE 2
after endlocal: var=VALUE 1
मैं देख रहा हूँ ... सही setlocal के बाद तो मूल रूप से हर सेट आपरेशन साफ हो जाएगा। मै उसे करने की एक कोशिश तो करूंगा। यह चर खुद को साफ़ करने धड़कता है। – ttback