สำหรับการนับวนจาก 1 ถึง n ในสคริปต์ค้างคาวของ windows


25

ฉันต้องการเรียกใช้คำสั่ง windows n ครั้งภายในไฟล์สคริปต์ค้างคาว ฉันรู้วิธีการทำเช่นนี้ในภาษาการเขียนโปรแกรมต่าง ๆ แต่ไม่สามารถจัดการเพื่อทำให้ถูกต้องบนบรรทัดคำสั่ง windows :-(

ฉันคาดหวังบางอย่างเช่น

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

หรือแม้กระทั่งสิ่งนี้ (แม้ว่าจะไม่ทั้งหมดอย่างจริงจัง)

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

ขอบคุณ!

แก้ไข

ฉันสามารถเขียนโปรแกรมใน java, perl, c หรืออะไรก็ตามที่จะสร้างค้างคาวสคริปต์ที่มีลักษณะเช่นนี้

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%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

แล้วรันมัน ... แต่สิ่งหนึ่งคือฉันต้องการวิธีรัดกุมในการระบุช่วงของตัวเลขเพื่อวนซ้ำภายในสคริปต์

ขอบคุณ!


1
คำตอบที่นี่ดีอย่างสมบูรณ์ แต่สำหรับความรักของพระเจ้า ... ชุด? จริงๆ? ฉันขอแนะนำให้ย้ายไปใช้ภาษาที่ทันสมัยกว่านี้
EBGreen

ดูเหมือนว่าเขาจะไม่มีทางเลือกในเรื่องนี้
wolfgangsz

ฉันไม่เห็นอะไรเลยที่บอกเป็นนัยว่าไม่มีทางเลือก ตามความเป็นจริงเขาบอกว่าเขาสามารถเขียนภาษา "อะไรก็ได้" ดังนั้นฉันจะบอกว่าไม่มีข้อมูลเพิ่มเติมดูเหมือนว่าเขาจะมีทางเลือก
EBGreen

พวกผมจำเป็นต้องปรับใช้รหัสที่เขียนในภาษาที่ทันสมัยจำแนกตามสคริปต์ ...
raoulsson

1
อาจจะเป็นหรือไม่จำเป็นต้องใช้ - บางครั้งมันเป็นเครื่องมือที่เหมาะสมสำหรับงาน คุณไม่สามารถรับประกัน PowerShell, bash, python, perl, และอื่น ๆ ติดตั้งบนกล่องเซิร์ฟเวอร์ Windows XP หรือ 2003 ชุดเป็นทางออกที่ยอมรับอย่างสมบูรณ์
Goyuix

คำตอบ:


44

คุณสามารถทำได้เช่นนี้:

ECHO Start of Loop

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

1,1,5 ถอดรหัสเป็น:

(start,step,end)

โปรดทราบว่าหากคุณฝังไฟล์นี้ไว้ในไฟล์แบทช์คุณจะต้องใช้เครื่องหมายเปอร์เซ็นต์คู่ (%%) เพื่อนำหน้าตัวแปรของคุณมิฉะนั้นตัวแปลคำสั่งจะพยายามประเมินตัวแปร% i ก่อนที่จะเรียกใช้ลูป


3
"ECHO Start of Loop" จะถูกดำเนินการในแต่ละขั้นตอนไม่ใช่เพียงแค่การเริ่มต้น
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
นอกจากนี้การใช้@เครื่องหมายจะเป็นการยกเลิกการพิมพ์คำสั่งในขณะที่ดำเนินการจากบรรทัดคำสั่ง "... DO @ (... "
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบเพิ่มเติม

สิ่งนี้ใช้ได้เฉพาะกับ / L หลังจาก "FOR" ทำไมเป็นอย่างนั้น?
raoulsson

1
ทำเพื่อ /? และคุณจะพบกับ: FOR / L% ตัวแปร IN (เริ่มต้น, ขั้นตอน, สิ้นสุด) คำสั่ง DO [คำสั่งพารามิเตอร์] ชุดเป็นลำดับของตัวเลขตั้งแต่ต้นจนจบโดยจำนวนขั้นตอน ดังนั้น (1,1,5) จะสร้างลำดับ 1 2 3 4 5 และ (5, -1,1) จะสร้างลำดับ (5 4 3 2 1)
EBGreen

มันจะดีกว่าที่จะใช้%%iในข้อความของคุณและเพิ่มความคิดเห็นที่มี%iไว้สำหรับการดำเนินการโดยตรงที่บรรทัดคำสั่ง ผู้ใช้ส่วนใหญ่จะทดสอบในไฟล์ BAT และพยายามค้นหาสาเหตุที่ทำให้เกิดข้อผิดพลาด (เช่นฉัน)
i486


6

โดยตรงจากบรรทัดคำสั่ง:

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

ใช้แบทช์ไฟล์:

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

แสดง:

1
2
3
...
100

เกิดอะไรขึ้นถ้าลำดับหมายเลขคือ 0001 ถึง 00100+ และอื่น ๆ
nwgat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.