Bagaimana Anda mengulang file batch Windows?


170

Apa sintaks untuk loop FOR dalam file batch Windows?

Jawaban:


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

daftar adalah daftar elemen apa pun, dipisahkan oleh spasi, koma, atau titik koma.

perintah dapat berupa perintah internal atau eksternal, file batch atau bahkan - dalam OS / 2 dan NT - daftar perintah

parameter berisi parameter baris perintah untuk perintah. Dalam contoh ini, perintah akan dieksekusi sekali untuk setiap elemen dalam daftar, menggunakan parameter jika ditentukan.

Tipe khusus parameter (atau bahkan perintah) adalah %% A, yang akan diganti oleh setiap elemen dari daftar secara berurutan.

Dari UNTUK loop


3
Bisakah saya memberikan rentang (1 hingga 100) dalam daftar?
Pradeep

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

letakkan parens di sekitar [ parameters ]jika Anda ingin memasukkan beberapa baris dalam forloop Anda
Frank Bryce

1
@ aaiezza, saya mendukung pendapat Anda. Saya bertarung dengan loop berdarah ini sekarang, bekerja sepenuhnya secara tak terduga, dan saya tidak tahu apa yang mengendalikan apa pun melihat output. Hal yang mengerikan. Berguna, tapi mengerikan.
RockDoctor

224

Jika Anda ingin melakukan sesuatu x kali, Anda dapat melakukan ini:

Contoh (x = 200):

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

1,1,200 cara:

  • Mulai = 1
  • Peningkatan per langkah = 1
  • Akhir = 200

17
Terima kasih telah menambahkan. Mungkin lebih jelas jika Anda mengubah nilai awal dalam contoh Anda ke sesuatu yang berbeda dari kenaikan.
Warren Stevens

7
Nilai akhir sudah termasuk.
Roland Pihlakas

54

Tipe:

for /?

dan Anda akan mendapatkan beberapa halaman teks bantuan.


8
Saya lebih suka ini daripada jawaban yang diterima karena menangani berbagai versi DOS / Windows. "Untuk" telah ditingkatkan cukup signifikan, selama bertahun-tahun, dan pertanyaannya tidak mengatakan versi apa yang ditargetkan atau skenario apa yang sedang dicoba.
Mattias Andersson

34

Lakukan perintah secara kondisional beberapa kali.

  • sintaks-UNTUK-File

    FOR %%parameter IN (set) DO command 
    
  • sintaks-UNTUK-File-Diakar di Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • sintaks-UNTUK-Folder

    FOR /D %%parameter IN (folder_set) DO command 
    
  • sintaks-UNTUK-Daftar angka

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • sintaks-UNTUK-File konten

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

    atau

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • sintaks-UNTUK-Perintah Hasil

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

Itu

  • Ambil satu set data
  • Buat Parameter UNTUK %%Gsama dengan beberapa bagian dari data itu
  • Lakukan perintah (opsional menggunakan parameter sebagai bagian dari perintah).
  • -> Ulangi untuk setiap item data

Jika Anda menggunakan perintah FOR di baris perintah daripada di program batch, gunakan hanya satu persen tanda: %Galih-alih %%G.

UNTUK Parameter

  • Parameter pertama harus didefinisikan menggunakan karakter tunggal, misalnya huruf G.

  • FOR %%G IN ...

    Dalam setiap iterasi loop UNTUK, IN ( ....)klausa dievaluasi dan %%Gdiatur ke nilai yang berbeda

    Jika klausa ini menghasilkan nilai tunggal maka %% G diset sama dengan nilai itu dan perintah dilakukan.

    Jika klausa menghasilkan beberapa nilai, maka parameter tambahan ditentukan secara implisit untuk menampung masing-masing. Ini secara otomatis ditetapkan dalam urutan abjad %%H %%I %%J... (definisi parameter implisit)

    Jika parameter merujuk ke file, maka referensi variabel yang disempurnakan dapat digunakan untuk mengekstrak nama file / path / tanggal / ukuran.

    Anda tentu saja dapat memilih huruf apa saja dari alfabet selain %%G. tetapi ini adalah pilihan yang baik karena tidak bertentangan dengan salah satu format surat pathname (a, d, f, n, p, s, t, x) dan menyediakan jangka waktu terpanjang dari huruf yang tidak saling bertentangan untuk digunakan sebagai parameter implisit .


1
Bagaimana cara saya menggunakan loop untuk masuk ke dalam variabel yang ditetapkan sebelumnya? Saya mencoba / F "token = 2 delims =," %% i in (% a%) do (..... tapi ini tidak berhasil. Gagal mengatakan "(tidak terduga saat ini"
Shivani

Hai yang disana. Apakah %a%memberi nama file biasa? Sulit membantu Anda dengan format ini. Jangan ragu untuk mengajukan pertanyaan baru setelah membaca Bagaimana Mengajukan Pertanyaan .
J. Chomel

2
@jumping_monkey, perintah FOR membuat variabel parameter yang diidentifikasi dengan huruf daripada angka (misalnya %% G). Format jalur Ekspansi Parameter juga dapat diterapkan ini. Untuk menghindari kebingungan di antara dua set huruf, hindari menggunakan huruf (a, d, f, n, p, s, t, x, z) sebagai parameter FOR atau cukup pilih parameter parameter FOR yang merupakan huruf BESAR.
J. Chomel

Hai @ J.Chomel, So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.mengerti (di sini) [ ss64.com/nt/syntax-args.html ), terima kasih. Salut kawan.
jumping_monkey

15

FOR akan memberi Anda informasi apa pun yang perlu Anda ketahui tentang loop FOR, termasuk contoh penggunaan yang tepat.


13

Coba kode ini:

@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

num1adalah angka yang akan ditambahkan dan num2merupakan nilai tambah ke num1dan terminator adalah nilai di mana num1akan berakhir. Anda dapat menunjukkan nilai yang berbeda untuk terminator dalam pernyataan ini ( if %num1%==%terminator% goto close). Ini adalah ekspresi boolean yang ditutup goto adalah proses jika boolean benar dan buka goto adalah proses jika boolean salah.


Ini yang paling mudah dipahami. Jawaban lain hampir tidak memberikan penjelasan tentang apa yang dilakukan perintah dan bendera. Untuk tipe pria yang hanya javascript, file batch tidak intuitif sama sekali.
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

Dari FOR /?doc bantuan:

UNTUK% variabel IN (set) DO command [parameter-perintah]

% variabel Menentukan parameter yang dapat diganti satu huruf.
(set) Menentukan satu set file atau lebih. Wildcard dapat digunakan. command Menentukan perintah yang harus dilakukan untuk setiap file.
parameter-perintah
Menentukan parameter atau sakelar untuk perintah yang ditentukan.

Untuk menggunakan perintah FOR dalam program batch, tentukan %% variabel daripada
% variabel. Nama variabel peka huruf besar kecil, jadi% i berbeda
dari% I.

Jika Ekstensi Perintah diaktifkan,
bentuk tambahan berikut dari perintah FOR didukung:

FOR / D% variabel IN (set) DO command [parameter-perintah]

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

FOR / R [[drive:] path]% variabel IN (set) DO command [parameter-perintah]

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.                               

UNTUK / L% variabel IN (mulai, langkah, akhir) perintah DO [parameter-perintah]

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)                                     
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.