คุณวนลูปในไฟล์แบตช์ Windows ได้อย่างไร


คำตอบ:


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

รายการ คือรายการขององค์ประกอบใด ๆ คั่นด้วยช่องว่างทั้งเครื่องหมายจุลภาคหรืออัฒภาค

คำสั่ง สามารถเป็นคำสั่งภายในหรือภายนอก, ไฟล์แบทช์หรือแม้กระทั่ง - ใน OS / 2 และ NT - รายการคำสั่ง

พารามิเตอร์ มีพารามิเตอร์บรรทัดคำสั่งสำหรับคำสั่ง ในตัวอย่างนี้คำสั่งจะถูกดำเนินการหนึ่งครั้งสำหรับทุกองค์ประกอบในรายการโดยใช้พารามิเตอร์หากระบุ

พารามิเตอร์ชนิดพิเศษ (หรือคำสั่งคู่) คือ %% A ซึ่งจะถูกแทนที่โดยแต่ละองค์ประกอบจากรายการอย่างต่อเนื่อง

จากFOR ลูป


3
ฉันสามารถให้ช่วง (1 ถึง 100) ในรายการได้หรือไม่
Pradeep

36
FOR /L %x IN (1,1,100) DO ...
Joey

วาง parens ไปรอบ ๆ[ parameters ]หากคุณต้องการรวมหลายบรรทัดในforลูปของคุณ
Frank Bryce

1
@aaiezza ฉันสองความคิดเห็นของคุณ ฉันกำลังต่อสู้กับลูปนองเลือดในขณะนี้ทำงานได้อย่างคาดไม่ถึงและฉันก็ไม่รู้ว่าอะไรเป็นตัวควบคุมสิ่งที่ดูที่ผลลัพธ์ สิ่งที่น่ากลัว มีประโยชน์ แต่น่ากลัว
RockDoctor

224

หากคุณต้องการทำอะไร x คูณคุณสามารถทำสิ่งนี้:

ตัวอย่าง (x = 200):

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

1,1,200 วิธีการ:

  • เริ่ม = 1
  • เพิ่มต่อขั้นตอน = 1
  • End = 200

17
ขอบคุณที่รับเข้ามา. อาจชัดเจนมากขึ้นถ้าคุณเปลี่ยนค่าเริ่มต้นในตัวอย่างของคุณเป็นสิ่งที่แตกต่างจากการเพิ่มขึ้น
Warren Stevens

7
รวมค่าสิ้นสุดแล้ว
Roland Pihlakas

54

ประเภท:

for /?

และคุณจะได้รับข้อความช่วยเหลือหลายหน้า


8
ฉันชอบสิ่งนี้มากกว่าคำตอบที่ยอมรับได้เพราะมันรองรับ DOS / Windows รุ่นต่างๆ "สำหรับ" ได้รับการปรับปรุงให้ดีขึ้นอย่างมีนัยสำคัญในช่วงหลายปีที่ผ่านมาและคำถามไม่ได้บอกว่ารุ่นใดที่มีการกำหนดเป้าหมายหรือสถานการณ์ที่พยายามทำ
Mattias Andersson

34

ทำคำสั่งแบบมีเงื่อนไขหลายครั้ง

  • ไวยากรณ์-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • ไวยากรณ์สำหรับไฟล์ที่ราก

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • ไวยากรณ์-FOR-โฟลเดอร์

    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
    

มัน

  • ใช้ชุดของข้อมูล
  • ทำให้พารามิเตอร์ FOR %%Gเท่ากับส่วนหนึ่งของข้อมูลนั้น
  • ดำเนินการคำสั่ง (เป็นทางเลือกโดยใช้พารามิเตอร์เป็นส่วนหนึ่งของคำสั่ง)
  • -> ทำซ้ำสำหรับแต่ละรายการของข้อมูล

หากคุณกำลังใช้คำสั่งสำหรับที่บรรทัดคำสั่งมากกว่าในโปรแกรมชุดใช้สัญญาณเพียงร้อยละหนึ่ง: แทน%G%%G

สำหรับพารามิเตอร์

  • ต้องกำหนดพารามิเตอร์แรกโดยใช้อักขระเดียวเช่นตัวอักษร G

  • FOR %%G IN ...

    ในการวนซ้ำของลูป FOR แต่ละIN ( ....)ประโยคจะถูกประเมินและ%%Gตั้งค่าเป็นค่าที่แตกต่างกัน

    หากข้อนี้ส่งผลให้มีค่าเดียวดังนั้น %% G จะถูกตั้งค่าเท่ากับค่านั้นและคำสั่งจะดำเนินการ

    หากอนุประโยคส่งผลให้มีหลายค่าพารามิเตอร์พิเศษจะถูกกำหนดโดยปริยายเพื่อเก็บไว้แต่ละค่า สิ่งเหล่านี้ถูกกำหนดโดยอัตโนมัติตามลำดับตัวอักษร%%H %%I %%J... (นิยามพารามิเตอร์โดยนัย)

    หากพารามิเตอร์อ้างถึงไฟล์การอ้างอิงตัวแปรที่ปรับปรุงแล้วสามารถใช้เพื่อแยกชื่อไฟล์ / พา ธ / วันที่ / ขนาด

    แน่นอนคุณสามารถเลือกตัวอักษรตัวอักษรใด ๆ นอกเหนือ%%Gจาก แต่เป็นตัวเลือกที่ดีเพราะไม่ขัดแย้งกับตัวอักษรรูปแบบชื่อพา ธ ใด ๆ (a, d, f, n, p, s, t, x) และให้การรันตัวอักษรที่ไม่ขัดแย้งกันที่ยาวที่สุดเพื่อใช้เป็นพารามิเตอร์โดยปริยาย .


1
ฉันจะใช้สำหรับการวนรอบเพื่อให้ได้ภายในตัวแปรที่ตั้งไว้ก่อนหน้าได้อย่างไร ฉันพยายามหา / F "โทเค็น = 2 delims =," %% i ใน (% a%) ทำ (… .. แต่มันใช้งานไม่ได้มันไม่พูดว่า "(ไม่คาดคิดในเวลานี้"
Shivani

สวัสดี. มีการ%a%ให้ชื่อของแฟ้มปกติหรือไม่ มันยากที่จะช่วยคุณในรูปแบบนี้ อย่าลังเลที่จะถามคำถามใหม่หลังจากที่ได้อ่านวิธีการขอ
J. Chomel

2
@jumping_monkey คำสั่ง FOR สร้างตัวแปรพารามิเตอร์ที่ระบุด้วยตัวอักษรมากกว่าตัวเลข (เช่น %% G) รูปแบบพา ธ การขยายพารามิเตอร์สามารถใช้สิ่งเหล่านี้ได้เช่นกัน เพื่อหลีกเลี่ยงความสับสนระหว่างตัวอักษรสองชุดให้หลีกเลี่ยงการใช้ตัวอักษร (a, d, f, n, p, s, t, x, z) สำหรับพารามิเตอร์หรือเพียงแค่เลือกตัวอักษรสำหรับพารามิเตอร์ที่เป็นตัวพิมพ์ใหญ่
J. Chomel

สวัสดี @ 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 ) ขอบคุณคุณ ไชโยเพื่อน
jumping_monkey

15

FOR จะให้ข้อมูลใด ๆ ที่คุณจำเป็นต้องรู้เกี่ยวกับ FOR loops รวมถึงตัวอย่างการใช้งานที่เหมาะสม


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และ terminator เป็นค่าที่num1จะสิ้นสุด คุณสามารถระบุค่าที่แตกต่างกันสำหรับ terminator ในคำสั่งนี้ ( if %num1%==%terminator% goto close) นี่เป็นนิพจน์บูลีน goto close เป็นกระบวนการถ้าบูลีนเป็นจริงและ goto open เป็นกระบวนการถ้าบูลีนเป็นเท็จ


นี่เป็นวิธีที่เข้าใจง่ายที่สุด คำตอบอื่น ๆ ให้คำอธิบายที่ใกล้เคียงกับสิ่งที่คำสั่งและธงทำ สำหรับจาวาสคริปต์ประเภทของผู้ชายเท่านั้นไฟล์แบตช์ไม่ได้ใช้งานง่ายเลย
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 /?เอกสารช่วยเหลือ:

FOR% ตัวแปร IN (set) คำสั่ง DO [คำสั่งพารามิเตอร์]

ตัวแปร% ระบุพารามิเตอร์ที่สามารถแทนที่ตัวอักษรเดียว
(set) ระบุชุดของไฟล์หนึ่งไฟล์ขึ้นไป อาจใช้สัญลักษณ์แทน คำสั่งระบุคำสั่งที่จะดำเนินการสำหรับแต่ละไฟล์
command-parameters
ระบุพารามิเตอร์หรือสวิตช์สำหรับคำสั่งที่ระบุ

หากต้องการใช้คำสั่ง FOR ในโปรแกรมแบตช์ให้ระบุตัวแปร %% แทน
ตัวแปร% ชื่อตัวแปรเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ดังนั้น% i จึงแตกต่าง
จาก% I

หากเปิดใช้งานส่วนขยาย
คำสั่งจะสนับสนุนรูปแบบเพิ่มเติมของคำสั่ง FOR ต่อไปนี้:

FOR / D% ตัวแปร IN (set) คำสั่ง DO [คำสั่งพารามิเตอร์]

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

FOR / R [เส้นทาง: ไดรฟ์]] ตัวแปร% IN (set) คำสั่ง 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.                               

FOR / 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)                                     
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.