Windows बैच फ़ाइल में आप लूप कैसे करते हैं?


जवाबों:


128
FOR %%A IN (list) DO command parameters

सूची किसी भी तत्व की एक सूची है, जिसे या तो रिक्त स्थान, अल्पविराम या अर्धविराम द्वारा अलग किया गया है।

कमांड किसी भी आंतरिक या बाह्य कमांड, बैच फ़ाइल या यहां तक ​​कि - ओएस / 2 और एनटी में - कमांड की एक सूची हो सकती है

पैरामीटर में कमांड के लिए कमांड लाइन पैरामीटर शामिल हैं। इस उदाहरण में, यदि निर्दिष्ट किया गया है, तो मापदंडों का उपयोग करके सूची में प्रत्येक तत्व के लिए एक बार कमांड निष्पादित किया जाएगा।

एक विशेष प्रकार का पैरामीटर (या यहां तक ​​कि कमांड) %% ए है, जिसे सूची से प्रत्येक तत्व द्वारा लगातार प्रतिस्थापित किया जाएगा।

से छोरों के लिए


3
क्या मैं सूची में सीमा (1 TO 100) दे सकता हूं?
प्रदीप

36
FOR /L %x IN (1,1,100) DO ...
जॉय

[ parameters ]यदि आप अपने forलूप में कई पंक्तियों को शामिल करना चाहते हैं, तो परिंदों को रखें
फ्रैंक ब्रायस

1
@aaiezza, मैं आपकी राय दूसरी। मैं अभी इन खूनी छोरों के साथ लड़ रहा हूं, पूरी तरह से अप्रत्याशित रूप से काम कर रहा हूं, और मुझे नहीं पता कि आउटपुट को देखकर कुछ भी नियंत्रित हो रहा है। डरपोक सामान। उपयोगी, लेकिन भयावह।
रॉकडॉक्टर

224

यदि आप कुछ एक्स बार करना चाहते हैं, तो आप यह कर सकते हैं:

उदाहरण (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 माध्यम:

  • आरम्भ = १
  • प्रति कदम वृद्धि = 1
  • अंत = २००

17
जोड़ने के लिए धन्यवाद। यदि आप अपने उदाहरण में शुरुआती मूल्य को वेतन वृद्धि से कुछ अलग करते हैं, तो आप अधिक स्पष्ट हो सकते हैं।
वॉरेन स्टीवंस

7
अंतिम मूल्य समावेशी है।
रोलैंड पिहलकास

54

प्रकार:

for /?

और आपको सहायता पाठ के कई पृष्ठ मिलेंगे।


8
मैं इसे स्वीकार किए गए उत्तर पर पसंद करता हूं क्योंकि यह डॉस / विंडोज के विभिन्न संस्करणों को संभालता है। "फॉर" को पिछले वर्षों में काफी बढ़ाया गया है, और सवाल यह नहीं कहता है कि क्या संस्करण (ओं) को लक्षित किया जा रहा है और न ही किस परिदृश्य का प्रयास किया जा रहा है।
मटियास एंडरसन

34

सशर्त रूप से कई बार कमांड करते हैं।

  • वाक्य रचना-लिए-फ़ाइलें

    FOR %%parameter IN (set) DO command 
    
  • सिंटैक्स-फ़ॉर-फाइल्स-रूट में निहित है

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • वाक्य रचना-लिए-फ़ोल्डर

    FOR /D %%parameter IN (folder_set) DO command 
    
  • संख्याओं की वाक्य-रचना-सूची

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • सिंटेक्स-फॉर-फ़ाइल सामग्री

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    या

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • सिंटेक्स-फॉर-कमांड परिणाम

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

यह

  • डेटा का एक सेट लें
  • %%Gउस डेटा के कुछ भाग के बराबर एक FOR पैरामीटर बनाएं
  • एक कमांड निष्पादित करें (वैकल्पिक रूप से कमांड के भाग के रूप में पैरामीटर का उपयोग करके)।
  • -> डेटा के प्रत्येक आइटम के लिए दोहराएं

यदि आप बैच प्रोग्राम के बजाय कमांड लाइन पर FOR कमांड का उपयोग कर रहे हैं, तो केवल एक प्रतिशत साइन का उपयोग करें: के %Gबजाय%%G

पैरामीटर्स के लिए

  • पहले पैरामीटर को एकल वर्ण का उपयोग करके परिभाषित किया जाना है, उदाहरण के लिए पत्र जी।

  • FOR %%G IN ...

    फ़ोर लूप के प्रत्येक पुनरावृत्ति में, IN ( ....)खंड का मूल्यांकन किया जाता है और%%G एक अलग मान पर सेट किया जाता है

    यदि यह खंड एकल मान में परिणामित होता है तो %% G उस मान के बराबर सेट हो जाता है और कमांड निष्पादित होता है।

    यदि खंड एक से अधिक मानों में परिणत होता है, तो प्रत्येक को धारण करने के लिए अतिरिक्त मापदंडों को स्पष्ट रूप से परिभाषित किया जाता है। ये स्वचालित रूप से वर्णानुक्रम में निर्दिष्ट किए जाते हैं%%H %%I %%J ... (अंतर्निहित पैरामीटर परिभाषा)

    यदि पैरामीटर किसी फ़ाइल को संदर्भित करता है, तो फ़ाइल नाम / पथ / दिनांक / आकार को निकालने के लिए बढ़ाया चर संदर्भ का उपयोग किया जा सकता है।

    आप निश्चित रूप से वर्णमाला के किसी भी पत्र को छोड़ सकते हैं %%G। लेकिन यह एक अच्छा विकल्प है क्योंकि यह पथनाम प्रारूप अक्षरों (ए, डी, एफ, एन, पी, एस, टी, एक्स) में से किसी के साथ संघर्ष नहीं करता है और निहित मापदंडों के रूप में उपयोग के लिए गैर-परस्पर विरोधी पत्रों का सबसे लंबा रन प्रदान करता है। ।


1
पहले से निर्धारित चर के अंदर जाने के लिए मैं लूप का उपयोग कैसे करूं? मैंने / F "टोकन = 2 डेलिम्स =," %% में (% a%) करते हैं (… .. लेकिन यह काम नहीं करता है।) यह कहते हुए विफल कर दिया "(इस समय अप्रत्याशित था"
शिवानी

नमस्ते। है %a%एक नियमित रूप से फ़ाइल का नाम दे रही है? इस प्रारूप में आपकी सहायता करना कठिन है। कैसे पूछें पढ़ने के बाद एक नया प्रश्न पूछने के लिए स्वतंत्र महसूस करें ।
जे। चोमेल

2
@jumping_monkey, फ़ॉर कमांड एक पैरामीटर वेरिएबल बनाता है, जो एक नंबर (उदाहरण %% G) के बजाय एक अक्षर से पहचाना जाता है। पथ प्रारूप पैरामीटर विस्तार भी इन्हें लागू किया जा सकता है। अक्षरों के दो सेटों के बीच भ्रम की स्थिति से बचने के लिए, मापदंडों के रूप में अक्षरों (ए, डी, एफ, एन, पी, एस, टी, एक्स, जेड) का उपयोग करने से बचें या बस एक पैरामीटर पत्र चुनें जो UPPER मामला है।
जे। चोमेल

Hi @ J.Chomel, So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.समझ गए (यहां) [ ss64.com/nt/syntax-args.html ), धन्यवाद। चीयर्स दोस्त।
छलांग_मनकी

15

FOR आपको कोई भी जानकारी देगा, जिसे आपको उचित उपयोग पर उदाहरण सहित, छोरों के बारे में जानने की आवश्यकता होगी।


13

इस कोड को आज़माएं:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1वृद्धि की जाने वाली संख्या है और टर्मिनेटर में num2जोड़ा जाने वाला मूल्य है num1और वह मान है जहां num1इच्छा समाप्त होगी। आप इस कथन में टर्मिनेटर के लिए अलग-अलग मान दिखा सकते हैं ( if %num1%==%terminator% goto close)। यह बूलियन एक्सप्रेशन है गोटो क्लोज़ इस प्रक्रिया है अगर बूलियन सही है और गोटो ओपन प्रक्रिया है यदि बूलियन गलत है।


यह समझना सबसे आसान है। अन्य उत्तर इस बात पर कोई स्पष्टीकरण नहीं देते हैं कि कमांड और झंडे क्या करते हैं। केवल एक प्रकार के जावास्क्रिप्ट के लिए, बैच फाइलें बिल्कुल सहज नहीं हैं।
1934286

5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit

5

से FOR /?सहायता दस्तावेज़:

% चर के लिए IN (सेट) डीओ कमांड [कमांड-पैरामीटर्स]

% चर एकल अक्षर बदली पैरामीटर निर्दिष्ट करता है।
(सेट) एक या एक से अधिक फ़ाइलों का एक सेट निर्दिष्ट करता है। वाइल्डकार्ड का उपयोग किया जा सकता है। कमांड प्रत्येक फाइल के लिए कमांड को निर्दिष्ट करता है।
कमांड-पैरामीटर
निर्दिष्ट कमांड के लिए पैरामीटर या स्विच निर्दिष्ट करता है।

बैच प्रोग्राम में FOR कमांड का उपयोग करने के लिए,% वेरिएबल के बजाय
% वेरिएबल निर्दिष्ट करें । परिवर्तनीय नाम केस संवेदी हैं, इसलिए% I% I से भिन्न
है।

यदि कमांड एक्सटेंशन सक्षम हैं,
तो फ़ॉर कमांड के अतिरिक्त रूप समर्थित हैं:

के लिए / डी% चर में (सेट) डीओ कमांड [कमांड-पैरामीटर]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

For / R [[ड्राइव:] पथ]% चर IN (सेट) DO कमांड [कमांड-पैरामीटर]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

के लिए / L% चर IN (प्रारंभ, चरण, अंत) DO कमांड [कमांड-पैरामीटर]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.