1

Вечер всех,

Я медленно учу PowerShell так обнажиться со мной!

Я сгенерировал этот код для запуска программы (MetaX), когда в папке присутствует расширение файла ... но когда он находит x расширение файла, он пытается запустить программу x количество раз.

$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 {}
}

я верю, что это как-то связано с функцией if else, но я могу ошибаться .. Я изначально пробовал для каждого, потом пробовал где-объект.

есть ли другая альтернатива этому, так как запуск программы 5 раз из-за наличия 5 расширений в папке, которую она ищет, плохо работает с программным обеспечением?

очень признателен

Коннор Брейсгедл

4 ответа4

1

Объект возвращает более одного файла с таким расширением. Затем вы выполняете программу каждый раз, когда появляется это расширение. Просто проверьте, существует ли расширение, то есть истина или ложь. Основываясь на этом результате, выполните вашу программу.

0

Удалось частично заставить его работать Спасибо Келтану за совет ..

$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"}

Работает нормально в некотором отношении, но он не смотрит на * .mp4 в папке, и он все равно будет запускать программу, если внутри ничего нет, одна вещь, с которой я запутался, это $ false и $ true .. id, хотя и в строке

If ($ContainsTrue -eq $false)

было бы правдой?

0

IIUR вы хотите запустить metax.exe один раз, если в пути есть хотя бы один файл .mp4:

$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
}
0

Наконец-то я обдумал это ... сначала выбрал значение true или false, а затем переключился на функцию Test-Path, немного поэкспериментировал и сумел заставить ее работать для этого экземпляра. Я думаю, что если бы я искал что-то более сложное, то это не сработало бы, что я нашел для другой проблемы, которая у меня есть (другой вопрос вообще поставит другой пост для этого)

$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 {}

Большое спасибо за вашу помощь, мне нравится изучать PowerShell

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .