2010-10-16 7 views
10
@echo off 
SET first=0 
FOR %%N IN (hello bye) DO (
SET first=1 
echo %first% 
echo %%N 
) 

ऐसा लगता है कि परिवर्तनीय "पहला" हमेशा 0 होता है क्यों?सेट करते समय भी यह बैच चर कभी भी क्यों नहीं बदलता है?

+0

[विंडोज बैच वैरिएबल सेट नहीं होगा] का संभावित डुप्लिकेट [https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) –

उत्तर

20

बैच फ़ाइलों के साथ, उनके आदेश को पढ़ने पर चर का विस्तार किया जाता है - ताकि for निष्पादित हो जाए। उस बिंदु पर, यह अब echo %first% कहता है, यह सचमुच echo 0 कहता है, क्योंकि यह विस्तार के बिंदु पर मूल्य था।

इसके आस-पास पहुंचने के लिए, आपको के बजाय ! के साथ अपने परिवर्तनीय नाम के आस-पास देरी से विस्तार का उपयोग करने की आवश्यकता है - ताकि echo !first! हो। इसके लिए आपको/v पैरामीटर के साथ cmd.exe शुरू करने की आवश्यकता हो सकती है, या अपनी बैच फ़ाइल की शुरुआत में setlocal enabledelayedexpansion का उपयोग करें (केवल echo off के बाद)।

यदि आप set /? टाइप करते हैं, तो आप आउटपुट के अंत में इसके बारे में अधिक विस्तृत स्पष्टीकरण देखेंगे।

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