Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 melakukan iterasi array nilai dan untuk beroperasi pada subset nilai-nilai ini. Dalam kebanyakan kasus, jika Anda ingin melakukan iterasi semua nilai dalam array, pertimbangkan untuk menggunakan pernyataan foreach.
Sintaksis
Berikut ini memperlihatkan sintaks pernyataan for.
for (<Init>; <Condition>; <Repeat>)
{
<Statement list>
}
Tempat penampung Init mewakili satu atau beberapa perintah yang dijalankan sebelum perulangan dimulai. Anda biasanya menggunakan bagian Init pernyataan untuk membuat dan menginisialisasi variabel dengan nilai awal.
Variabel ini kemudian akan menjadi dasar untuk kondisi yang akan diuji dalam bagian berikutnya dari pernyataan for.
Tempat penampung Kondisi mewakili bagian dari pernyataan for yang diselesaikan ke nilai$true atau $false Boolean. PowerShell mengevaluasi kondisi setiap kali perulangan for berjalan. Jika pernyataan $true, perintah dalam blok perintah berjalan, 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 Condition bagian dari pernyataan.
Daftar Pernyataan tempat penampung 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 penugasan 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 penugasan 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"
}
Nota
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, pernyataan for mengharuskan tanda kurung di sekitar Init, Kondisi, dan Ulangi bagian dari pernyataan dan perintah yang dikelilingi oleh kurung kurawal dalam daftar Pernyataan bagian dari pernyataan.
Perhatikan bahwa contoh yang akan datang sengaja menampilkan kode di luar pernyataan for. Dalam contoh selanjutnya, kode diintegrasikan ke dalam pernyataan for.
Misalnya, pernyataan for berikut terus menampilkan nilai variabel $i sampai 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 variabel $i karena bertambah 1 setiap kali perulangan dijalankan.
Daripada mengubah nilai variabel dalam bagian daftar pernyataan dari pernyataan for, Anda dapat menggunakan bagian Ulangi dari pernyataan for 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 Kondisi dari pernyataan for. Perulangan for berakhir ketika kondisi mengevaluasi ke $false.
Dalam contoh berikut, perulangan for berjalan sementara nilai $i kurang dari atau sama dengan 10.
$i=1
for(;$i -le 10;$i++)
{
Write-Host $i
}
Alih-alih membuat dan menginisialisasi variabel di luar pernyataan for, Anda dapat melakukan tugas ini di dalam perulangan for dengan menggunakan bagian Init dari pernyataan for.
for($i=1; $i -le 10; $i++){Write-Host $i}
Anda dapat menggunakan pengembalian carriage alih-alih titik koma untuk memisahkan bagian Init, Condition, dan Ulangi bagian dari pernyataan for. Contoh berikut menunjukkan for yang menggunakan sintaks alternatif ini.
for ($i = 0
$i -lt 10
$i++){
$i
}
Bentuk alternatif pernyataan for ini berfungsi dalam file skrip PowerShell dan di prompt perintah PowerShell. Namun, lebih mudah untuk menggunakan sintaks pernyataan for dengan titik koma saat Anda memasukkan perintah interaktif pada prompt perintah.
Perulangan for lebih fleksibel daripada perulangan foreach karena memungkinkan Anda untuk menaikkan nilai dalam array atau koleksi dengan menggunakan pola. Dalam contoh berikut, variabel $i bertambah 2 dalam bagian Ulangi dari pernyataan for.
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 folder work_items memiliki ID item kerja mereka 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 variabel $fileList, 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 baru $sortedOriginal dan $sortedPadded. Terakhir, ia menggunakan perulangan for untuk melakukan iterasi pada array dan menghasilkan objek dengan properti berikut:
- Index 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.