Powershell, programmiere exe mit wenn sonst


1

Abend alle,

Ich lerne langsam Powershell so nackt mit mir!

ive hat diesen Code generiert, um ein Programm (MetaX) auszuführen, wenn eine Dateierweiterung in einem Ordner vorhanden ist. Wenn jedoch x Dateierweiterungen gefunden werden, wurde x Mal versucht, das Programm auszuführen.

$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\3_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\2_TEMPORARY\TV_SHOWS"
$MetaXExtensions = @(".mp4")

Set-Location $MetaXTVShows
Get-ChildItem | Where-Object {
If ($MetaXExtensions -contains $_.Extension)
{& $MetaX\metax.exe /T /A $MetaXTVShows /AT $Files3 /C}
Else {}
}

Ich glaube, es hat etwas mit der if else-Funktion zu tun, aber ich könnte mich irren.

Gibt es eine andere Alternative als das Programm 5-mal auszuführen, da sich 5 Erweiterungen in dem Ordner befinden, in dem gesucht wird? Funktioniert dies nicht gut mit der Software?

sehr geschätzt

Connor Bracegirdle


Müssen Sie also $MetaX\metax.exegegen alle .mp4Dateien laufen , die in gefunden werden $MetaXTVShows? Ich nehme an, das ist es, was Sie meinen, dass Sie 5 Dateien .mp4in diesem Ordner haben, also müssen Sie für jede dieser Dateien den Prozess gegen diese ausführen?
Pimp Juice IT

Hallo Saft, nein, also im Grunde genommen, wenn ich Metax laufen lasse, wird es durch das gesamte Verzeichnis schauen und Metadaten für alle Dateien in einem Fenster ablegen und in ein anderes Verzeichnis verschieben, wie ich sage, 5 .mp4 fliegt in dem Ordner, den es auszuführen versucht Das Programm hat in der ersten Instanz fünfmal 5 .mp4-Dateien identifiziert. Die restlichen vier Male des Programms können die Daten jetzt offensichtlich nicht finden, da sie verschoben wurden. Es muss nur ein Mal geöffnet sein, unabhängig davon, wie viele MP4-Dateien sind im Ordner, wenn das Sinn macht
Connor Bracegirdle

Antworten:


1

Das Objekt gibt mehr als eine Datei mit dieser Erweiterung zurück. Anschließend führen Sie das Programm jedes Mal aus, wenn diese Erweiterung angezeigt wird. Prüfen Sie einfach, ob die Erweiterung existiert, dh wahr oder falsch. Führen Sie basierend auf diesem Ergebnis Ihr Programm aus.


danke, ich habe eine Ausgrabung und sehe, was ich mir einfallen lassen und meine Ergebnisse posten kann .. danke
Connor Bracegirdle

0

Es ist gelungen, es teilweise zum Laufen zu bringen. Danke Keltan für den Rat.

$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\3_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\2_TEMPORARY\TV_SHOWS"
$MetaXExtensions = @(".mp4")
$ContainsTrue = $MetaXExtensions -contains $_.Extension

Set-Location $MetaXTVShows
If ($ContainsTrue -eq $false)
    {& "C:\Program Files (x86)\MetaX\metax.exe" /T /A $MetaXTVShows /AT $Files3 /C}
Else {"NOTHING"}

Funktioniert in gewisser Hinsicht gut, aber es sieht nicht nach * .mp4 im Ordner und es wird immer noch das Programm ausgeführt, wenn nichts drin ist

If ($ContainsTrue -eq $false)

wäre wahr gewesen?


1
Sie sollten Ihre eigenen Fragen nur mit funktionierenden Lösungen beantworten. Dies ist für nachfolgende Leser nicht hilfreich. $_.Extensionist nur innerhalb einer { }Pipe gültig (ForEach-Object / Where-Object)
LotPings

0

IIUR möchten Sie metax.exe ausführen, wenn sich mindestens eine .mp4-Datei im Pfad befindet:

$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\3_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\2_TEMPORARY\TV_SHOWS"
$MetaXExtensions = @("*.mp4")
Set-Location $MetaXTVShows

if ((Get-ChildItem $MetaXExtensions).count -ge 1){
    & $MetaX\metax.exe /T /A $MetaXTVShows /AT $Files3 /C
}

1
Ich wollte auf etwas hinweisen, da $MetaXExtensionses in dieser Antwort nicht vorhanden ist, aber das OP hat, da @(".mp4")es in einen String konvertiert werden muss, dh $MetaXExtensions = [string]$MetaXExtensionsbevor es in dieser Antwort richtig funktioniert, oder einfach anstelle des Array-Objekts oder was auch immer verwendet -Filter "*.mp3"oder gesetzt wird $MetaXExtensions = "*.mp3". Davon abgesehen scheint dies das Problem für das OP vollständig zu lösen, also gute Idee mit dem Zählvergleich im if-Block.
Pimp Juice IT

@PimpJuiceIT guten Fang, danke für den Hinweis. Das Skript wurde geändert.
LotPings

0

Endlich habe ich es verstanden. Zuerst habe ich mich für wahr oder falsch entschieden und dann die Test-Path-Funktion aufgerufen, ein wenig herumgespielt und es geschafft, dass es für diese Instanz funktioniert. Ich denke, wenn ich nach etwas Komplexerem suchen würde, dann würde dies nicht funktionieren, was ich bei einem anderen Problem gefunden habe.

$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXMovies = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\2_TEMPORARY\MOVIES"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\2_TEMPORARY\TV_SHOWS"
$MetaXExtensions = "*.mp4"
$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER\3_FINISHED"

If (Test-Path $MetaXMovies\$MetaXExtensions)
    {& "C:\Program Files (x86)\MetaX\metax.exe" /V /A $MetaXMovies /AT $Files3 /C | Out-Null}
   Else {}
If (Test-Path $MetaXTVShows\$MetaXExtensions)
    {& "C:\Program Files (x86)\MetaX\metax.exe" /T /A $MetaXTVShows /AT $Files3 /C | Out-Null}
   Else {}

Vielen Dank für Ihre Hilfe, ich genieße es, Powershell zu lernen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.