एक ब्लॉक बयान (a parenthesised series of statements)
के भीतर, पूरे ब्लॉक पार्स किया गया है और तो मार डाला। ब्लॉक को निष्पादित करने से पहले ब्लॉक के भीतर %var%
ब्लॉक को उस चर के मान द्वारा प्रतिस्थापित किया जाएगा जब ब्लॉक को - पार्स निष्पादित करने से पहले - एक ही चीज़ FOR ... DO (block)
पर लागू होती है।
इसलिए, IF (something) else (somethingelse)
%variables%
के मानों का उपयोग करके IF
के समय का उपयोग किया जाएगा।
दो आम तरीके इस पर काबू पाने के लिए 1 कर रहे हैं) setlocal enabledelayedexpansion
का उपयोग करें और var
की बदली हुई मूल्य का उपयोग करने की %var%
के स्थान पर !var!
का उपयोग करें या 2) बदली हुई मानों का उपयोग कर आगे की प्रक्रिया के प्रदर्शन करने के लिए एक सबरूटीन कॉल करने के लिए करने के लिए।
इसलिए CALL ECHO %%var%%
का उपयोग नोट करें जो var
के बदले गए मान को प्रदर्शित करता है।
आपके कोड में दो अलग-अलग चर शामिल हैं जिन्हें f
कहा जाता है।
पहला लूप-कंट्रोल 'मेटावार्येबल' है जिसे f
कहा जाता है और %%f
द्वारा संदर्भित किया जाता है।
दूसरा सामान्य पर्यावरण परिवर्तनीय f
है जो set "f=..."
कथन द्वारा स्थापित किया गया है।यह चर %f%
लेकिन का उपयोग कर एक block
भीतर द्वारा पहुँचा जा सकता है, यह मूल्य यह था जब नियंत्रित करने for
पार्स किया गया था बनाए रखने के लिए दिखाई देगा (वास्तव में, किसी भी %var%
पार्स-समय में है कि कम से var
के मान से बदल दिया गया है समय)
metavariables
सबस्ट्रिंग या विकल्प, केवल आम वातावरण चर इन कार्यों के लिए इस्तेमाल किया जा सकता है जैसे स्ट्रिंग-हेरफेर बयान में नहीं किया जा सकता, इसलिए आप वातावरण चर f
और को metavariable f
का मूल्य निर्दिष्ट करने की जरूरत है तो स्ट्रिंग-प्रतिस्थापन कार्य का प्रदर्शन करें पर्यावरण चर f
।
मोड़, ज़ाहिर है कि आपको delayedexpansion
और !var!
वाक्यविन्यास का उपयोग ब्लॉक के भीतर एक पर्यावरण चर के संशोधित मूल्य तक पहुंचने के लिए करना चाहिए।
तो,
setlocal enabledelayedexpansion
for...%%f...do (
echo %%f
set "f=%%f"
set "f=!f:\=/!"
echo !f!
)
echo just for demonstration %f% !f! %%f
यह अपेक्षित तरीके से f
का मूल्य निर्धारित करता है (बेशक, आप हमेशा नाम बदल सकता है भ्रम से बचने के ...)
अंतिम पंक्ति करने के लिए है दिखाएं कि f
द्वारा अधिग्रहित अंतिम मूल्य को लूप के बाहर %f%
या !f!
के रूप में एक्सेस किया जा सकता है, और %%f
बाहर संदर्भ है और %f
के रूप में दिखाया गया है।
delayedexpansion
बिना यह करने के लिए एक और तरीका है
for...%%f...do (
echo %%f
set "f=%%f"
call set "f=%%f:\=/%%"
call echo %%f%%
)
echo just for demonstration %f% !f! %%f
अंतर call
के उपयोग किया जा रहा है और दोहरीकरण %
रों है, और अंतिम पंक्ति !f!
के रूप में सिर्फ इतना है कि दिखाएगा - एक शाब्दिक, delayedexpansion
के बाहर के बाद से मोड, !
cmd
पर कोई विशेष अर्थ नहीं वाला एक और चरित्र है।
यह सवाल ही समाधान [आप एक बैच फ़ाइल द्वारा एफ़टीपी अपलोड में उपयोगकर्ता नाम का उल्लेख कैसे करूं] है (http://stackoverflow.com/questions/23535640/how-do-you-specify-the-username-in-ftp-upload-by-a-batch-file) – jeb
क्या आप निश्चित रूप से उस प्रश्न में समाधान के बारे में सुनिश्चित हैं जो आपने लिंक किया है ? मुझे जवाब नहीं दिख रहा है, और वे मेरे लिए अलग-अलग प्रश्नों की तरह दिखते हैं। – user3253319
क्षमा करें, आप सही हैं। मेरा मतलब था [बैच - कर्नल के लिए% 20 के साथ फ़ाइल नाम में रिक्त स्थान बदलना] (http://stackoverflow.com/questions/23538894/batch-replacing-spaces-in-filename-with-20-for-curl) – jeb