Powershell Loop Überprüfen Sie Senario

0

Szenario - Ich versuche, nach einer Dateierweiterung (mkv & mp4) zu suchen. Wenn diese Dateien in meinem Download-Ordner vorhanden sind, werden eine Reihe von Funktionen ausgeführt, die im Folgenden aufgeführt sind (diese sind # zu Testzwecken, funktionieren jedoch alle) fein)

Was ich versuche zu tun ist, wenn es eine Schleife dieses Skripts abgeschlossen hat, erneut suchen, um zu sehen, ob weitere MKV- oder MP4-Dateien vorhanden sind und erneut ausgeführt werden und wenn sie nicht vorhanden sind, stoppen.

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\1_DOWNLOAD"

    If (Get-ChildItem -Recurse -Include *.mkv,*.mp4 -Path $Files1)
      {Write-Host "MKV or MP4 File Exists"
            #MoveFilesFunction
            #RenameFilesFunction
            #MoveMoviesFunction
            #ConvertTVShowFunction
            #MetaDataFunction
      } Else {Write-Host "MKV or MP4 Does Not Exist"}

Ich glaube, ich muss die Do While-Funktion verwenden. Könnte dies jemand bestätigen? wenn ich das benutzen sollte, dann weiß ich nicht, wie ich das tun anfange.

Skript, das ich gefunden habe, um durchzuarbeiten und zu lernen, ist unten

$a = 2
$max = 10

"enter the loop"
Do
    {
        If ($a -gt $max){break}

        "starting the loop"
        $a
        $a++

        If ($a -gt $max){break}

        "now '$a is $a"
    } While ($a -le $max)

"now do something outside the loop"

Ist das etwas, mit dem ich bis zu einem gewissen Grad arbeiten sollte? Ich muss mich natürlich anpassen, um meinen Bedürfnissen gerecht zu werden. Aber bin ich im richtigen Baseballstadion, um dies als "Basis" zu verwenden, oder muss ich etwas anderes verwenden?

Danke vielmals! Connor Bracegirdle

Connor Bracegirdle
quelle

Antworten:

0

IMHO, Sie haben diesen Aufwand viel zu kompliziert.

Mein Vorschlag ist uns eine einfache forLoop.

$FileItems = Get-ChildItem  -Path 'F:\Music' -Recurse -Include *.mkv,*.mp4
ForEach($FileItem in $FileItems)
{ "MKV or MP4 File Exists for $($FileItem.Name)"
    #MoveFilesFunction
    #RenameFilesFunction
    #MoveMoviesFunction
    #ConvertTVShowFunction
    #MetaDataFunction
}

Da Sie bereits nur nach den spezifischen Dateitypen fragen, ...

Sonst {Write-Host "MKV oder MP4 existiert nicht"}

... wird niemals ausgeführt, da der Filter nicht benötigt wird. Write Host wird nur benötigt, wenn Sie Text farbcodieren oder eine andere benutzerdefinierte Formatierung verwenden.

Diese...

Write-Host "MKV oder MP4 existieren nicht"

.. und das ..

"MKV oder MP4 gibt es nicht"

… Werde dasselbe tun. Senden Sie Text an den Bildschirm. Die andere Option ist die Verwendung von Write-Output im Vergleich zu dem, was Sie hier haben.

Postanote
quelle
Danke für die Rückmeldung, postanote .. aber wenn du sagst 'Else {write-host “mkv oder mp4 wird nicht beendet”} ... wird niemals ausgeführt, auf meinem Skript ist das wenn es keine mkv oder mp4 Datei gibt die Mappe? Danke für den Hinweis auf die. Write-Host-Bit auch .. Sucht dies für jede Funktion nach zusätzlichen MKV-MP4-Dateien, nachdem es dann bereits einmal abgeschlossen wurde? Da ich jedes Mal überprüfen möchte, ob dieser Vorgang abgeschlossen ist, und dann wiederholen, bis nichts mehr im Ordner ist. Danke
Connor Bracegirdle
@ConnorBracegirdle Vorausgesetzt, Sie haben eine do while $TrueEndlosschleife verwendet, wird ständig gemeldet, no file...sobald vorhandene Dateien verarbeitet werden. Planen Sie das Skript besser so, dass es in Intervallen ausgeführt wird, oder verwenden Sie eine Dateiüberwachung.
LotPings
Dieses Skript wird von Bittorrent aktiviert. Wenn eine Datei abgeschlossen ist, wird dieses Programm ausgeführt, um Metadaten usw. umzubenennen, zu konvertieren, hinzuzufügen und in den entsprechenden Ordner zu verschieben. Es treten jedoch Probleme mit der Metadaten-Software auf, die mehr als eine Anwendung ausführt, wenn 2 Torrents fast abgeschlossen sind Gleichzeitig werden 2 Metadaten-Softwareprogramme ausgeführt. Ich möchte also, dass es prüft, ob weitere Dateien fertiggestellt und in den Ordner verschoben wurden, bevor es geschlossen wird, damit es bei Bedarf neu erstellt werden kann
Connor Bracegirdle,
0

Ich habe mir dieses Skript ausgedacht, aber ich habe Probleme, die Schleife zum Unterbrechen eines falschen Lesens von Dateiinhalten zu bringen, wenn sie nach einer Schleife aus dem Ordner verschwindet

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\1_DOWNLOAD"
$SearchTrue = Get-ChildItem -Recurse -Include *.mkv,*.mp4 -Path $Files1

While ($SearchTrue)
     {  "MKV or MP4 File Exists"
        Start-Sleep 5
        #MoveFilesFunction
        #RenameFilesFunction
        #MoveMoviesFunction
        #ConvertTVShowFunction
        #MetaDataFunction 
        If ($SearchTrue -eq $null) {break}
     } 
 "MKV or MP4 Does Not Exist"
 Start-Sleep 5

Was ich tue, ist die Simulation der gesuchten MKV- oder MP4-Datei, die entfernt wurde, nachdem sie aufgrund der Funktionen verschoben wurde

Danke Connor Bracegirdle

Connor Bracegirdle
quelle
Sie setzen einmal die Variable $SearchTruemit dem Inhalt eines gci. Die while-Bedingung ändert sich nicht und ist endlos. Readget-help about_while
LotPings
Ich verstehe das Konzept der While-Funktion, aber ich habe erwartet, dass die Variable trotzdem funktioniert. Ich habe das "$ SearchTrue" entfernt und das "Get-ChildItem -Recurse -Include .mkv, .mp4 -Path $" eingefügt Files1 'in die While (Bedingung) scheint den Trick zu tun! Vielen Dank für die Hilfe, die LotPing auch versucht, das Code-Format in den Kommentar zu setzen, aber ich kann nicht scheinen, es zum Laufen zu bringen
Connor Bracegirdle
0

Um die tatsächliche Anzahl von mkv / mp4-Dateien zu erhalten, versetzen Sie das gci in die while-Bedingung (mit der count-Eigenschaft).

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\1_DOWNLOAD"
While ((Get-ChildItem -Recurse -Include *.mkv,*.mp4 -Path $Files1).Count -gt 0){
    "MKV or MP4 File Exists"
    #MoveFilesFunction
    #RenameFilesFunction
    #MoveMoviesFunction
    #ConvertTVShowFunction
    #MetaDataFunction 
} 
"MKV or MP4 Does Not Exist"
Start-Sleep 5
LotPings
quelle