Bagikan melalui


about_For

Deskripsi singkat

Menjelaskan perintah bahasa yang dapat Anda gunakan untuk menjalankan pernyataan berdasarkan pengujian kondisional.

Deskripsi panjang

Pernyataan For (juga dikenal sebagai perulangan For ) adalah konstruksi bahasa yang dapat Anda gunakan untuk membuat perulangan yang menjalankan perintah dalam blok perintah sementara kondisi tertentu mengevaluasi ke $true.

Penggunaan umum perulangan For adalah untuk mengulangi array nilai dan untuk beroperasi pada subset nilai-nilai ini. Dalam kebanyakan kasus, jika Anda ingin melakukan iterasi semua nilai dalam array, pertimbangkan untuk Foreach menggunakan pernyataan.

Sintaks

Berikut ini memperlihatkan For sintaks pernyataan.

for (<Init>; <Condition>; <Repeat>)
{
    <Statement list>
}

Tempat penampung Init mewakili satu atau beberapa perintah yang dijalankan sebelum perulangan dimulai. Anda biasanya menggunakan bagian Init dari pernyataan untuk membuat dan menginisialisasi variabel dengan nilai awal.

Variabel ini kemudian akan menjadi dasar untuk kondisi yang akan diuji dalam bagian berikutnya dari For pernyataan.

Tempat penampung Kondisi mewakili bagian dari For pernyataan yang diselesaikan ke $true nilai atau $falseBoolean . PowerShell mengevaluasi kondisi setiap kali perulangan For berjalan. Jika pernyataannya adalah $true, perintah dalam blok perintah dijalankan, dan pernyataan dievaluasi lagi. Jika kondisi masih $true, perintah dalam daftar Pernyataan berjalan lagi. Perulangan diulang sampai kondisi menjadi $false.

Tempat penampung Ulangi mewakili satu atau beberapa perintah, dipisahkan oleh koma, yang dijalankan setiap kali perulangan diulang. Biasanya, ini digunakan untuk memodifikasi variabel yang diuji di dalam bagian Kondisi dari pernyataan.

Tempat penampung daftar Pernyataan mewakili sekumpulan satu atau beberapa perintah yang dijalankan setiap kali perulangan dimasukkan atau diulang. Konten daftar Pernyataan dikelilingi oleh kurung kurawal.

Dukungan untuk beberapa operasi

Sintaks berikut didukung untuk beberapa operasi penetapan dalam pernyataan Init :

# Comma separated assignment expressions enclosed in parentheses.
for (($i = 0), ($j = 0); $i -lt 10; $i++)
{
    "`$i:$i"
    "`$j:$j"
}

# Sub-expression using the semicolon to separate statements.
for ($($i = 0;$j = 0); $i -lt 10; $i++)
{
    "`$i:$i"
    "`$j:$j"
}

Sintaks berikut didukung untuk beberapa operasi penetapan dalam pernyataan Ulangi :

# Comma separated assignment expressions.
for (($i = 0), ($j = 0); $i -lt 10; $i++, $j++)
{
    "`$i:$i"
    "`$j:$j"
}

# Comma separated assignment expressions enclosed in parentheses.
for (($i = 0), ($j = 0); $i -lt 10; ($i++), ($j++))
{
    "`$i:$i"
    "`$j:$j"
}

# Sub-expression using the semicolon to separate statements.
for ($($i = 0;$j = 0); $i -lt 10; $($i++;$j++))
{
    "`$i:$i"
    "`$j:$j"
}

Catatan

Operasi selain kenaikan pra atau pasca mungkin tidak berfungsi dengan semua sintaks.

Untuk beberapa Kondisi , gunakan operator logis seperti yang ditunjukkan oleh contoh berikut.

for (($i = 0), ($j = 0); $i -lt 10 -and $j -lt 10; $i++,$j++)
{
    "`$i:$i"
    "`$j:$j"
}

Untuk informasi selengkapnya, lihat about_Logical_Operators.

Contoh sintaks

Minimal, For pernyataan memerlukan tanda kurung di sekitar bagian Init, Condition, dan Repeat dari pernyataan dan perintah yang dikelilingi oleh kurung kurawal di bagian Daftar pernyataan.

Perhatikan bahwa contoh yang akan datang sengaja menampilkan kode di luar For pernyataan. Dalam contoh selanjutnya, kode diintegrasikan ke For dalam pernyataan.

Misalnya, pernyataan berikut For terus menampilkan nilai $i variabel hingga Anda keluar dari perintah secara manual dengan menekan CTRL+C.

$i = 1
for (;;)
{
    Write-Host $i
}

Anda dapat menambahkan perintah tambahan ke daftar pernyataan sehingga nilai $i bertambah 1 setiap kali perulangan dijalankan, seperti yang ditunjukkan contoh berikut.

for (;;)
{
    $i++; Write-Host $i
}

Hingga Anda keluar dari perintah dengan menekan CTRL+C, pernyataan ini akan terus menampilkan nilai $i variabel karena bertambah 1 setiap kali perulangan dijalankan.

Daripada mengubah nilai variabel dalam bagian daftar pernyataan dari For pernyataan, Anda dapat menggunakan bagian Ulangi dari For pernyataan sebagai gantinya, sebagai berikut.

$i=1
for (;;$i++)
{
    Write-Host $i
}

Pernyataan ini masih akan berulang tanpa batas waktu sampai Anda keluar dari perintah dengan menekan CTRL+C.

Anda dapat mengakhiri perulangan For menggunakan kondisi. Anda dapat menempatkan kondisi menggunakan bagian For Kondisi pernyataan. Perulangan For berakhir ketika kondisi mengevaluasi ke $false.

Dalam contoh berikut, perulangan For berjalan sementara nilai kurang dari $i atau sama dengan 10.

$i=1
for(;$i -le 10;$i++)
{
    Write-Host $i
}

Alih-alih membuat dan menginisialisasi variabel di luar For pernyataan, Anda dapat melakukan tugas ini di dalam For perulangan dengan menggunakan bagian Init dari For pernyataan.

for($i=1; $i -le 10; $i++){Write-Host $i}

Anda dapat menggunakan pengembalian operator alih-alih titik koma untuk memisahkan bagian For Init, Kondisi, dan Ulangi pernyataan. Contoh berikut menunjukkan For yang menggunakan sintaks alternatif ini.

for ($i = 0
  $i -lt 10
  $i++){
  $i
}

Bentuk For alternatif pernyataan ini berfungsi dalam file skrip PowerShell dan di prompt perintah PowerShell. Namun, lebih mudah untuk menggunakan For sintaks pernyataan dengan titik koma saat Anda memasukkan perintah interaktif pada prompt perintah.

Perulangan For lebih fleksibel daripada Foreach perulangan karena memungkinkan Anda untuk menaikkan nilai dalam array atau koleksi dengan menggunakan pola. Dalam contoh berikut, $i variabel bertambah 2 dalam bagian For Ulangi pernyataan.

for ($i = 0; $i -le 20; $i += 2)
{
    Write-Host $i
}

Perulangan For juga dapat ditulis pada satu baris seperti dalam contoh berikut.

for ($i = 0; $i -lt 10; $i++) { Write-Host $i }

Contoh fungsi

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan perulangan For untuk melakukan iterasi melalui array file dan mengganti namanya. File dalam work_items folder memiliki ID item kerjanya sebagai nama file. Perulangan berulang melalui file untuk memastikan bahwa nomor ID adalah nol-padded ke lima digit.

Pertama, kode mengambil daftar file data item kerja. Mereka semua file JSON yang menggunakan format <work-item-type>-<work-item-number> untuk namanya. Dengan objek info file yang disimpan ke $fileList variabel, Anda dapat mengurutkannya berdasarkan nama dan melihat bahwa saat item dikelompokkan menurut jenis, urutan item menurut ID tidak terduga.

$fileList = Get-ChildItem -Path ./work_items
$fileList | Sort-Object -Descending -Property Name
bug-219.json
bug-41.json
bug-500.json
bug-697.json
bug-819.json
bug-840.json
feat-176.json
feat-367.json
feat-373.json
feat-434.json
feat-676.json
feat-690.json
feat-880.json
feat-944.json
maint-103.json
maint-367.json
maint-454.json
maint-49.json
maint-562.json
maint-579.json

Untuk memastikan bahwa Anda dapat mengurutkan item kerja secara alfanumerik, nomor item kerja harus nol-padded.

Kode melakukan ini dengan terlebih dahulu mencari item kerja dengan akhiran numerik terpanjang. Ini mengulangi file menggunakan perulangan for , menggunakan indeks untuk mengakses setiap file dalam array. Ini membandingkan setiap nama file dengan pola ekspresi reguler untuk mengekstrak nomor item kerja sebagai string, bukan bilangan bulat. Kemudian membandingkan panjang nomor item kerja untuk menemukan angka terpanjang.

# Default the longest numeral count to 1, since it can't be smaller.
$longestNumeralCount = 1

# Regular expression to find the numerals in the filename - use a template
# to simplify updating the pattern as needed.
$patternTemplate = '-(?<WorkItemNumber>{{{0},{1}}})\.json'
$pattern         =  $patternTemplate -f $longestNumeralCount

# Iterate, checking the length of the work item number as a string.
for (
    $i = 0                 # Start at zero for first array item.
    $i -lt $fileList.Count # Stop on the last item in the array.
    $i++                   # Increment by one to step through the array.
) {
    if ($fileList[$i].Name -match $pattern) {
        $numeralCount = $Matches.WorkItemNumber.Length
        if ($numeralCount -gt $longestNumeralCount) {
            # Count is higher, check against it for remaining items.
            $longestNumeralCount = $numeralCount
            # Update the pattern to speed up the search, ignoring items
            # with a smaller numeral count using pattern matching.
            $pattern = $patternTemplate -f $longestNumeralCount
        }
    }
}

Sekarang setelah Anda mengetahui jumlah angka maksimum untuk item kerja, Anda dapat mengulangi file untuk mengganti namanya sesuai kebutuhan. Cuplikan kode berikutnya berulang kali melalui daftar file lagi, padding sesuai kebutuhan. Ini menggunakan pola ekspresi reguler lain untuk hanya memproses file dengan jumlah angka yang lebih kecil dari maksimum.

# Regular expression to find the numerals in the filename, but only if the
# numeral count is smaller than the longest numeral count.
$pattern = $patternTemplate -f 1, ($longestNumeralCount - 1)
for (
    $i = 0                 # Start at zero for first array item.
    $i -lt $fileList.Count # Stop on the last item in the array.
    $i++                   # Increment by one to step through the array.
) {
    # Get the file from the array to process
    $file = $fileList[$i]

    # If the file doesn't need to be renamed, continue to the next file
    if ($file.Name -notmatch $pattern) {
        continue
    }

    # Get the work item number from the regular expression, create the
    # padded string from it, and define the new filename by replacing
    # the original number string with the padded number string.
    $workItemNumber = $Matches.WorkItemNumber
    $paddedNumber   = "{0:d$longestNumeralCount}" -f $workItemNumber
    $paddedName     = $file.Name -replace $workItemNumber, $paddedNumber

    # Rename the file with the padded work item number.
    $file | Rename-Item -NewName $paddedName
}

Sekarang setelah file diganti namanya, Anda dapat mengambil daftar file lagi dan mengurutkan file lama dan baru berdasarkan nama. Cuplikan berikut mengambil file lagi untuk disimpan dalam array baru dan membandingkan dengan kumpulan objek awal. Kemudian mengurutkan kedua array file, menyimpan array yang diurutkan ke dalam variabel $sortedOriginal baru dan $sortedPadded. Terakhir, ia menggunakan perulangan for untuk melakukan iterasi pada array dan menghasilkan objek dengan properti berikut:

  • Indeks mewakili indeks saat ini dalam array yang diurutkan.
  • Asli adalah item dalam array yang diurutkan dari nama file asli pada indeks saat ini.
  • Padded adalah item dalam array yang diurutkan dari nama file yang diisi pada indeks saat ini.
$paddedList = Get-ChildItem -path ./work_items

# Sort both file lists by name.
$sortedOriginal = $fileList    | Sort-Object -Property Name
$sortedPadded   = $renamedList | Sort-Object -Property Name

# Iterate over the arrays and output an object to simplify comparing how
# the arrays were sorted before and after padding the work item numbers.
for (
  $i = 0
  $i -lt $fileList.Count
  $i++
) {
    [pscustomobject] @{
        Index    = $i
        Original = $sortedOriginal[$i].Name
        Padded   = $sortedPadded[$i].Name
    }
}
Index Original       Padded
----- --------       ------
    0 bug-219.json   bug-00041.json
    1 bug-41.json    bug-00219.json
    2 bug-500.json   bug-00500.json
    3 bug-697.json   bug-00697.json
    4 bug-819.json   bug-00819.json
    5 bug-840.json   bug-00840.json
    6 feat-176.json  feat-00176.json
    7 feat-367.json  feat-00367.json
    8 feat-373.json  feat-00373.json
    9 feat-434.json  feat-00434.json
   10 feat-676.json  feat-00676.json
   11 feat-690.json  feat-00690.json
   12 feat-880.json  feat-00880.json
   13 feat-944.json  feat-00944.json
   14 maint-103.json maint-00049.json
   15 maint-367.json maint-00103.json
   16 maint-454.json maint-00367.json
   17 maint-49.json  maint-00454.json
   18 maint-562.json maint-00562.json
   19 maint-579.json maint-00579.json

Dalam output, item kerja yang diurutkan setelah padding berada dalam urutan yang diharapkan.

Lihat juga