Wie kann ich eine Schleife mit Inkrementen wiederholen lasse?

3 Antworten

Du brauchst hierfür eine sogenannte "nested loop", also eine verschachtelte Schleife. Wenn du eine Datei gefunden hast, dann fängst du einfach die Schleife erneut von vorne an und durchsuchst den aktuellen Ordner erneut. Hierfür musst du einfach eine Variable (z.B. "i") nutzen, die du bei jedem Durchgang erhöhst ("i++") und wenn du erneut den Ordner durchsuchen möchtest, verringere die Variable einfach um eins ("i--").

BONEz851 
Fragesteller
 24.02.2023, 10:11

ah okay ich probiere es mal aus

0
BONEz851 
Fragesteller
 24.02.2023, 10:33

Frage, wenn er den Ordner erneuert durchsucht, dann springt er zum nächsten

0
malte314  24.02.2023, 16:42

Eine nested Loop ist etwas anderes:

for (int i = 0; i<n; i++) {
  for (int j = 0; j<m; j++) {
    }
}
0

in Powershell gibts mehere Varianten um um verschachtelte Schleifen zu bauen.

wenn er eine Datei gefunden hat, dann soll er den Ordner nochmal durchgehen

macht für mich zwar keinen Sinn noch mal das Gleich bei jeder gefundenen Datei zu chen???,

.... aber warum nicht.

Als Pipe:

Get-ChildItem -File| #finde alle Dateien im Ordner
     #bei jeder gefundenen Datei führe den Code innerhalb der geschweiften Klammer aus
    ForEach-Object {
        Write-Host Outer Loop found File: $_   -Foreground green  #bloß  ma was Anzeigen lassen
        Get-ChildItem -File| #nochmal Ordner durchsuchen (wird  bei  jedem "äußeren" fund ausgeführt  )
         #dito
            ForEach-Object {
                Write-Host Innerer Loop found File: $_   -Foreground blue
            }
    }
pause

als Klassischer ForEach-Loop

$OuterScan = Get-ChildItem -File  #finde alle Dateien im Ordner und speichere in äußerer Variable
 #bei jeder gefundenen Datei führe den Code innerhalb der geschweiften Klammer aus
ForEach ($File in $OuterScan) { #die Variable $File ist in diesem Fall lediglich temporär
  Write-Host Outer Loop found File: $File  -Foreground green #bloß ma was Anzeigen lassen
  $InnerScan = Get-ChildItem -File #nochmal Ordner durchsuchen und jedesmal die Innere Variable erneut befüllen
  ForEach ($File in $InnerScan) { #$File temporär
    Write-Host Innerer Loop found File: $File -Foreground blue
  }
}
pause

Auch wenn das Iterieren über die Arrays per Indexvariable in diesem Fall völliger Unsinn ist, es geht:

$OuterScan = Get-ChildItem -File  
  #Anzahl der Elemente in  dem Array $OuterScan ermitteln und mit der indexvariable $i darüber Iterieren
For ($i=0; $i -lt $OuterScan.Count; ++$i) { 
    Write-Host Outer Loop found File: $OuterScan[$i]   -Foreground green  
    $InnerScan = Get-ChildItem -File 
    For ($i2=0; $i2 -lt $InnerScan.Count; ++$i2) { #aufpassen, die indexvariable   für  den inneren Zähler muss eien anderen Namen haben
        Write-Host Innerer Loop found File: $InnerScan[$i2]  -Foreground blue
    }
}
pause

Mehr zu Schleifen:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Das könnte, wenn ich dein Problem richtig verstanden habe, so funktionieren:

File[] files = dir.listFiles(); // dir ist der Ordner
for (int i = 0; i < files.lenght; i++) {
    File f = files[f];
    if (istGesuchteDatei(f)) {
        i = -1; // weil i direkt danach von der Schleife inkr. wird
    }
}
Woher ich das weiß:Studium / Ausbildung – B.Sc. Computer Science