@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
ऐसा लगता है कि परिवर्तनीय "पहला" हमेशा 0 होता है क्यों?सेट करते समय भी यह बैच चर कभी भी क्यों नहीं बदलता है?
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)
ऐसा लगता है कि परिवर्तनीय "पहला" हमेशा 0 होता है क्यों?सेट करते समय भी यह बैच चर कभी भी क्यों नहीं बदलता है?
बैच फ़ाइलों के साथ, उनके आदेश को पढ़ने पर चर का विस्तार किया जाता है - ताकि for
निष्पादित हो जाए। उस बिंदु पर, यह अब echo %first%
कहता है, यह सचमुच echo 0
कहता है, क्योंकि यह विस्तार के बिंदु पर मूल्य था।
इसके आस-पास पहुंचने के लिए, आपको के बजाय !
के साथ अपने परिवर्तनीय नाम के आस-पास देरी से विस्तार का उपयोग करने की आवश्यकता है - ताकि echo !first!
हो। इसके लिए आपको/v पैरामीटर के साथ cmd.exe शुरू करने की आवश्यकता हो सकती है, या अपनी बैच फ़ाइल की शुरुआत में setlocal enabledelayedexpansion
का उपयोग करें (केवल echo off
के बाद)।
यदि आप set /?
टाइप करते हैं, तो आप आउटपुट के अंत में इसके बारे में अधिक विस्तृत स्पष्टीकरण देखेंगे।
[विंडोज बैच वैरिएबल सेट नहीं होगा] का संभावित डुप्लिकेट [https://stackoverflow.com/questions/9681863/windows-batch-variables-wont-set) –