Làm thế nào để bạn lặp trong một tệp bó Windows?


Câu trả lời:


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

danh sách là một danh sách của bất kỳ yếu tố nào, được phân tách bằng dấu cách, dấu phẩy hoặc dấu chấm phẩy.

lệnh có thể là bất kỳ lệnh nội bộ hoặc bên ngoài, tệp bó hoặc thậm chí - trong OS / 2 và NT - một danh sách các lệnh

tham số chứa các tham số dòng lệnh cho lệnh. Trong ví dụ này, lệnh sẽ được thực thi một lần cho mọi phần tử trong danh sách, sử dụng tham số nếu được chỉ định.

Một loại tham số đặc biệt (hoặc lệnh chẵn) là %% A, sẽ được thay thế bởi mỗi phần tử từ danh sách liên tiếp.

Từ vòng lặp FOR


3
Tôi có thể đưa ra phạm vi (1 đến 100) trong danh sách không?
Pradeep

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

đặt parens xung quanh [ parameters ]nếu bạn muốn bao gồm nhiều dòng trong forvòng lặp của mình
Frank Bryce

1
@aaiezza, tôi thứ hai ý kiến ​​của bạn. Tôi đang chiến đấu với những vòng lặp đẫm máu này ngay bây giờ, hoạt động hoàn toàn bất ngờ, và tôi không biết điều gì đang kiểm soát bất cứ thứ gì nhìn vào đầu ra. Thứ khủng khiếp. Hữu ích, nhưng kinh khủng.
RockDoctor

223

Nếu bạn muốn làm điều gì đó x lần, bạn có thể làm điều này:

Ví dụ (x = 200):

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

1,1,200 có nghĩa:

  • Bắt đầu = 1
  • Tăng mỗi bước = 1
  • Hết = 200

17
Cảm ơn đã thêm. Có thể rõ ràng hơn nếu bạn thay đổi giá trị bắt đầu trong ví dụ của bạn thành một cái gì đó khác với gia số.
Warren Stevens

7
Giá trị cuối cùng đã bao gồm.
Roland Pihlakas

54

Kiểu:

for /?

và bạn sẽ nhận được một vài trang văn bản trợ giúp.


8
Tôi thích câu trả lời này hơn câu trả lời được chấp nhận vì nó xử lý các phiên bản khác nhau của DOS / Windows. "Cho" đã được tăng cường khá đáng kể, trong nhiều năm qua, và câu hỏi không nói (các) phiên bản nào đang được nhắm mục tiêu cũng như kịch bản nào đang được thử.
Mattias Andersson

34

Có điều kiện thực hiện một lệnh nhiều lần.

  • cú pháp-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • cú pháp-FOR-Files-Rooted tại Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • cú pháp FOR-Folders

    FOR /D %%parameter IN (folder_set) DO command 
    
  • cú pháp-FOR-Danh sách số

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • nội dung cú pháp-FOR-File

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

    hoặc là

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • cú pháp-FOR-Command Kết quả

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

  • Lấy một bộ dữ liệu
  • Tạo tham số FOR %%Gbằng với một phần của dữ liệu đó
  • Thực hiện một lệnh (tùy chọn sử dụng tham số như là một phần của lệnh).
  • -> Lặp lại cho từng mục dữ liệu

Nếu bạn đang sử dụng lệnh FOR tại dòng lệnh thay vì trong chương trình bó, chỉ sử dụng một dấu phần trăm: %Gthay vì %%G.

CHO tham số

  • Tham số đầu tiên phải được xác định bằng một ký tự đơn, ví dụ chữ G.

  • FOR %%G IN ...

    Trong mỗi lần lặp của vòng lặp FOR, IN ( ....)mệnh đề được ước tính và %%Gđược đặt thành một giá trị khác nhau

    Nếu mệnh đề này dẫn đến một giá trị đơn thì %% G được đặt bằng giá trị đó và lệnh được thực hiện.

    Nếu mệnh đề dẫn đến nhiều giá trị thì các tham số phụ được xác định ngầm định để giữ từng giá trị. Chúng được tự động gán theo thứ tự bảng chữ cái %%H %%I %%J... (định nghĩa tham số ngầm)

    Nếu tham số tham chiếu đến một tệp, thì tham chiếu biến nâng cao có thể được sử dụng để trích xuất tên tệp / đường dẫn / ngày / kích thước.

    Tất nhiên bạn có thể chọn bất kỳ chữ cái nào của bảng chữ cái khác hơn %%G. nhưng nó là một lựa chọn tốt vì nó không xung đột với bất kỳ chữ cái định dạng tên đường dẫn nào (a, d, f, n, p, s, t, x) và cung cấp các chữ cái không xung đột dài nhất để sử dụng làm tham số ẩn .


1
Làm cách nào để sử dụng vòng lặp để vào bên trong một biến được đặt trước đó? Tôi đã thử / F "tokens = 2 delims =," %% i in (% a%) do (Thẻ .. nhưng điều này không hoạt động. Nó không nói "(thật bất ngờ vào lúc này"
Shivani

Chào bạn Là %a%đưa ra tên của một tập tin thông thường? Thật khó để giúp bạn với định dạng này. Hãy hỏi một câu hỏi mới sau khi đọc Làm thế nào để hỏi .
J. Chomel

2
@jumping_monkey, Lệnh FOR tạo các biến tham số được xác định bằng một chữ cái thay vì một số (ví dụ: %% G). Định dạng đường dẫn Mở rộng tham số cũng có thể được áp dụng. Để tránh nhầm lẫn giữa hai bộ chữ cái, tránh sử dụng các chữ cái (a, d, f, n, p, s, t, x, z) làm tham số FOR hoặc chỉ chọn một chữ cái tham số FOR là trường hợp UPPER.
J. Chomel

Xin chào @ J.Chomel, Hiểu So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.rồi (tại đây) [ ss64.com/nt/syntax-args.html ), cảm ơn bạn. Cổ vũ người bạn đời.
jump_monkey

15

FOR sẽ cung cấp cho bạn bất kỳ thông tin nào bạn cần biết về các vòng lặp FOR, bao gồm các ví dụ về cách sử dụng hợp lý.


13

Hãy thử mã này:

@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

num1là số được tăng lên và num2là giá trị được thêm vào num1và terminator là giá trị num1kết thúc. Bạn có thể chỉ ra giá trị khác nhau cho terminator trong câu lệnh này ( if %num1%==%terminator% goto close). Đây là biểu thức boolean goto close là quá trình nếu boolean là true và goto open là quá trình nếu boolean là false.


Đây là cách dễ hiểu nhất. Các câu trả lời khác gần như không có lời giải thích về những gì các lệnh và cờ làm. Đối với một loại javascript chỉ có anh chàng, các tệp bó không trực quan chút nào.
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

Từ FOR /?tài liệu trợ giúp:

FOR% biến IN (set) Lệnh DO [tham số lệnh]

% biến Chỉ định một tham số có thể thay thế một chữ cái.
(bộ) Chỉ định một bộ gồm một hoặc nhiều tệp. Ký tự đại diện có thể được sử dụng. lệnh Chỉ định lệnh để thực hiện cho mỗi tệp.
tham số lệnh
Chỉ định tham số hoặc chuyển đổi cho lệnh được chỉ định.

Để sử dụng lệnh FOR trong chương trình bó, chỉ định biến %% thay vì
biến%. Tên biến là trường hợp nhạy cảm, vì vậy% i khác
với% I.

Nếu Tiện ích mở rộng lệnh được bật, các
hình thức bổ sung sau của lệnh FOR được hỗ trợ:

Biến FOR / D% IN (set) Lệnh DO [tham số lệnh]

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

FOR / R [[drive:] path]% biến IN (set) lệnh DO [tham số lệnh]

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.                               

Biến FOR / L% IN (bắt đầu, bước, kết thúc) Lệnh DO [tham số lệnh]

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)                                     
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.