O objeto está retornando mais de um arquivo com essa extensão. Então você está executando o programa toda vez que a extensão aparece. Basta verificar se a extensão existe, ou seja, verdadeira ou falsa. Com base nesse resultado, execute seu programa.
Tarde a todos,
Estou lentamente deixando o powershell tão nu comigo!
ive gerou este código para executar um programa (MetaX) quando uma extensão de arquivo está presente em uma pasta .. mas quando ele encontra x quantidade de extensão de arquivo ele tentou rodar o programa x quantidade de vezes.
$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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 {}
}
Eu acredito que é algo a ver com a função if else, mas eu poderia estar errado .. Eu originalmente tentei para cada então tentei onde-objeto.
existe alguma outra alternativa para isto, já que rodar o programa 5 vezes devido a 5 extensões na pasta que ele está pesquisando não funciona bem com o software?
muito apreciado
Connor Bracegirdle
O objeto está retornando mais de um arquivo com essa extensão. Então você está executando o programa toda vez que a extensão aparece. Basta verificar se a extensão existe, ou seja, verdadeira ou falsa. Com base nesse resultado, execute seu programa.
Conseguido que isso funcione parcialmente Obrigado Keltan pelo conselho ..
$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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"}
Funciona muito bem a um certo respeito, mas ele não parece em * .mp4 na pasta e ainda executará o programa se nada estiver dentro, uma coisa em que eu sou confusado é o $ false e $ true.
If ($ContainsTrue -eq $false)
teria sido True?
IIUR você deseja executar o metax.exe uma vez que haja pelo menos um arquivo .mp4 no caminho:
$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_FINISHED"
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_TEMPORARY\TV_SHOWS"
$MetaXExtensions = @("*.mp4")
Set-Location $MetaXTVShows
if ((Get-ChildItem $MetaXExtensions).count -ge 1){
& $MetaX\metax.exe /T /A $MetaXTVShows /AT $Files3 /C
}
Finalmente cheguei a minha cabeça ... primeiro fui verdadeiro ou falso e, em seguida, deixei cair a função Test-Path, tive uma pequena brincadeira e consegui fazê-la funcionar para esta instância. Eu acho que se eu estivesse procurando por algo mais complexo, então este trabalho não funcionaria em outro problema que estou tendo (pergunta diferente colocará outro post para isso)
$MetaX = "C:\Program Files (x86)\MetaX"
$MetaXMovies = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_TEMPORARY\MOVIES"
$MetaXTVShows = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_TEMPORARY\TV_SHOWS"
$MetaXExtensions = "*.mp4"
$Files3 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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 {}
Muito obrigado por tudo o que você ajuda, estou gostando de aprender PowerShell
Tags powershell