Сценарий - я пытаюсь проверить расширение файла (mkv & mp4), и если эти файлы присутствуют в моей папке загрузки, он запускает ряд функций, которые присутствуют ниже (это # для целей тестирования, но все работают отлично)

то, что я пытаюсь сделать, когда он завершил один цикл этого скрипта, выполнить поиск еще раз, чтобы увидеть, присутствуют ли другие файлы mkv или mp4 и работают ли они снова, и если их нет, остановите.

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

Я думаю, что мне нужно использовать функцию «Пока», может кто-нибудь подтвердить? если бы я должен был использовать это, то я не знаю, как id начать делать.

скрипт, который я нашел для проработки и изучения ниже

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

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

Большое спасибо! Коннор Брейсгедл

3 ответа3

0

Чтобы получить фактическое количество файлов mkv/mp4, поместите gci в условие while (со свойством count)

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

ИМХО, у тебя слишком сложное усилие.

Мое предложение для нас является простым для цикла.

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

Поскольку вы уже запрашиваете только определенные типы файлов, это ...

Else {Write-Host "MKV или MP4 не существует"}

... никогда не выполнится, это не нужно из-за использования вашего фильтра. Запись хоста никогда не требуется, если вы не используете цветовую кодировку текста или другое пользовательское форматирование.

Это...

Write-Host "MKV или MP4 не существует"

.. и это ..

"MKV или MP4 не существует"

... сделаю то же самое. Отправьте текст на экран, другой вариант - использовать Write-Output против того, что у вас есть здесь.

0

Я пришел с этим сценарием, но у меня возникли проблемы с прерыванием цикла при ложном чтении содержимого файла, когда он исчезает из папки после цикла

$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

Что я делаю, так это симуляция искомого файла mkv или mp4, который был удален после того, как он был перемещен из-за функций, но когда я перемещаю папку, он все еще думает, что файл есть, и не прервет цикл

спасибо Коннор Брейсгедл

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