about_For

Descrizione breve

Descrive un comando di linguaggio che è possibile usare per eseguire istruzioni basate su un test condizionale.

Descrizione lunga

L'istruzione For (nota anche come For ciclo) è un costrutto di linguaggio che è possibile usare per creare un ciclo che esegue comandi in un blocco di comandi mentre una condizione specificata restituisce $true.

Un uso tipico del ciclo consiste nell'iterazione For di una matrice di valori e nell'operare su un subset di questi valori. Nella maggior parte dei casi, se si desidera eseguire l'iterazione di tutti i valori in una matrice, è consigliabile usare un'istruzione Foreach .

Sintassi

Di seguito viene illustrata la sintassi dell'istruzione For .

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

Il segnaposto Init rappresenta uno o più comandi eseguiti prima dell'inizio del ciclo. In genere si usa la parte Init dell'istruzione per creare e inizializzare una variabile con un valore iniziale.

Questa variabile sarà quindi la base per la condizione da testare nella parte successiva dell'istruzione For .

Il segnaposto Condition rappresenta la parte dell'istruzione For che viene risolta in un $true valore booleano o $false. PowerShell valuta la condizione ogni volta che viene eseguito il For ciclo. Se l'istruzione è $true, i comandi nel blocco di comandi vengono eseguiti e l'istruzione viene valutata di nuovo. Se la condizione è ancora $true, i comandi nell'elenco Istruzioni vengono eseguiti di nuovo. Il ciclo viene ripetuto fino a quando la condizione non diventa $false.

Il segnaposto Repeat rappresenta uno o più comandi, separati da virgole, che vengono eseguiti ogni volta che il ciclo viene ripetuto. In genere, viene usato per modificare una variabile testata all'interno della parte Condition dell'istruzione .

Il segnaposto elenco istruzioni rappresenta un set di uno o più comandi eseguiti ogni volta che il ciclo viene immesso o ripetuto. Il contenuto dell'elenco Istruzioni è racchiuso tra parentesi graffe.

Supporto per più operazioni

Le sintassi seguenti sono supportate per più operazioni di assegnazione nell'istruzione 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"
}

Le sintassi seguenti sono supportate per più operazioni di assegnazione nell'istruzione Repeat :

# 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

Le operazioni diverse da pre o post increment possono non funzionare con tutte le sintassi.

Per più condizioni usare operatori logici, come illustrato nell'esempio seguente.

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

Per altre informazioni, vedere about_Logical_Operators.

Esempi

Come minimo, un'istruzione For richiede la parentesi che circonda la parte Init, Condition e Repeat dell'istruzione e un comando racchiuso tra parentesi graffe nella parte dell'elencoIstruzioni dell'istruzione.

Si noti che gli esempi futuri mostrano intenzionalmente il codice all'esterno dell'istruzione For . Negli esempi successivi il codice è integrato nell'istruzione For .

Ad esempio, l'istruzione seguente For visualizza continuamente il valore della $i variabile fino a quando non si interrompe manualmente il comando premendo CTRL+C.

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

È possibile aggiungere altri comandi all'elenco di istruzioni in modo che il valore di $i venga incrementato di 1 ogni volta che viene eseguito il ciclo, come illustrato nell'esempio seguente.

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

Finché non si interrompe il comando premendo CTRL+C, questa istruzione visualizzerà continuamente il valore della $i variabile man mano che viene incrementato di 1 ogni volta che viene eseguito il ciclo.

Anziché modificare il valore della variabile nella parte dell'elenco di istruzioni dell'istruzione For , è possibile usare invece la parte Repeat dell'istruzione For , come indicato di seguito.

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

Questa istruzione verrà ripetuta a tempo indeterminato fino a quando non si interrompe il comando premendo CTRL+C.

È possibile terminare il For ciclo usando una condizione. È possibile inserire una condizione usando la parte Condizione dell'istruzione For . Il For ciclo termina quando la condizione restituisce $false.

Nell'esempio seguente il For ciclo viene eseguito mentre il valore di $i è minore o uguale a 10.

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

Anziché creare e inizializzare la variabile all'esterno dell'istruzione For , è possibile eseguire questa attività all'interno del For ciclo usando la parte Init dell'istruzione For .

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

È possibile utilizzare i ritorni a capo anziché i punti e virgola per delimitare le parti Init, Condition e Repeat dell'istruzione For . Nell'esempio seguente viene illustrato un For oggetto che usa questa sintassi alternativa.

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

Questa forma alternativa dell'istruzione For funziona nei file di script di PowerShell e al prompt dei comandi di PowerShell. Tuttavia, è più semplice usare la sintassi dell'istruzione For con punti e virgola quando si immettono comandi interattivi al prompt dei comandi.

Il For ciclo è più flessibile del Foreach ciclo perché consente di incrementare i valori in una matrice o in una raccolta usando i criteri. Nell'esempio seguente la $i variabile viene incrementata di 2 nella parte Repeat dell'istruzione For .

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

Il For ciclo può anche essere scritto su una riga come nell'esempio seguente.

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

Vedi anche