Đối với Vòng lặp đếm từ 1 đến n trong tập lệnh bat windows


25

Tôi cần chạy lệnh windows n lần trong tệp script bat. Tôi biết cách thực hiện điều này bằng nhiều ngôn ngữ lập trình khác nhau nhưng không thể quản lý để có được nó ngay trên dòng lệnh windows :-(

Tôi sẽ mong đợi một cái gì đó giống như

for(int i = 0; i < 100; i++) {
   // do something
}

hoặc thậm chí điều này (mặc dù không hoàn toàn nghiêm túc)

1.upto(100, {
   // do something
}) 

Cảm ơn!

CHỈNH SỬA

Tôi có thể viết một chương trình bằng java, perl, c hoặc bất cứ thứ gì sẽ tạo ra một tập lệnh bat trông như thế này

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

vân vân Hoặc thậm chí "tốt hơn":

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

và sau đó thực thi nó ... Nhưng vấn đề là tôi cần một cách ngắn gọn để chỉ định một phạm vi số để lặp lại trong tập lệnh.

Cảm ơn!


1
Câu trả lời ở đây là hoàn toàn tốt, nhưng vì tình yêu của Chúa ... đợt? Có thật không? Tôi rất khuyên bạn nên chuyển sang một ngôn ngữ hiện đại hơn.
EBGreen

Có vẻ như anh ấy không có sự lựa chọn nào khác.
wolfgangsz

Tôi chưa thấy bất cứ điều gì ngụ ý rằng không có sự lựa chọn. Vì thực tế anh ta nói rằng anh ta có thể viết bằng ngôn ngữ "bất cứ thứ gì", vì vậy tôi sẽ nói rằng nếu không có thêm thông tin thì có vẻ như anh ta có một sự lựa chọn.
EBGreen

Các bạn, tôi cần triển khai mã THAT được viết bằng ngôn ngữ hiện đại BỞI một kịch bản ...
raoulsson

1
Có thể nó là hoặc không cần thiết - đôi khi nó là công cụ phù hợp cho công việc. Bạn không thể đảm bảo quyền hạn, hãy để bash, python, perl, v.v. được cài đặt trên hộp máy chủ Windows XP hoặc 2003. Batch là một giải pháp hoàn toàn chấp nhận được.
Goyuix

Câu trả lời:


44

Bạn có thể làm điều tương tự như thế này:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

1,1,5 được giải mã là:

(start,step,end)

Cũng lưu ý, nếu bạn nhúng tệp này vào tệp bó, bạn sẽ cần sử dụng dấu hai phần trăm (%%) để thêm tiền tố vào các biến của mình, nếu không, trình thông dịch lệnh sẽ cố gắng đánh giá biến% i trước khi chạy vòng lặp.


3
"ECHO Start of Loop" sẽ được thực hiện ở mỗi bước, không chỉ bắt đầu.
Tạm dừng cho đến khi có thông báo mới.

1
Ngoài ra, sử dụng một @dấu hiệu sẽ thay thế việc in các lệnh khi chúng được thực thi từ dòng lệnh. "... DO @ (..."
Tạm dừng cho đến khi có thông báo mới.

Điều này chỉ hoạt động với / L sau "FOR". Tại sao vậy
raoulsson

1
Làm cho /? và bạn sẽ tìm thấy: FOR / L% biến IN (bắt đầu, bước, kết thúc) Lệnh DO [tham số lệnh] Tập hợp là một chuỗi các số từ đầu đến cuối, theo số lượng bước. Vì vậy (1,1,5) sẽ tạo ra chuỗi 1 2 3 4 5 và (5, -1,1) sẽ tạo ra chuỗi (5 4 3 2 1)
EBGreen

Nó là tốt hơn để sử dụng %%itrong văn bản của bạn và thêm nhận xét rằng nó là %iđể thực hiện trực tiếp tại dòng lệnh. Hầu hết người dùng sẽ kiểm tra nó trong tệp BAT và cố gắng tìm lý do tại sao họ gặp lỗi (như tôi).
i486


6

Trực tiếp từ dòng lệnh:

for /L %n in (1,1,100) do @echo %n

Sử dụng tệp bó:

@echo off
for /L %%n in (1,1,100) do echo %%n

Hiển thị:

1
2
3
...
100

Điều gì xảy ra nếu dãy số là 0001 đến 00100+, v.v?
nwgat
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.