Powershell Loop Verifique senario

0

Cenário - Estou tentando fazer uma verificação de uma extensão de arquivo (mkv & mp4) e se esses arquivos estiverem presentes na minha pasta de download, ele executará uma série de funções que estão abaixo (são # para teste fins, mas tudo funciona bem)

O que estou tentando fazer é quando tiver completado um loop deste script, procure novamente para ver se algum outro arquivo mkv ou mp4 está presente e rodando novamente e se eles não estiverem presentes, pare.

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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"}

Acho que preciso usar a função Do While, alguém poderia confirmar? se eu fosse usar isso, então eu não sei como iniciar o processo.

script que encontrei para trabalhar e aprender está abaixo

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

é algo com que eu deveria estar trabalhando em algum grau, obviamente eu preciso falar e adaptar para atender às minhas necessidades, mas eu estou no lugar certo para usar isso como uma 'base' ou eu preciso usar outra coisa? ?

Muito obrigado! Connor Bracegirdle

    
por Connor Bracegirdle 27.05.2018 / 00:35

3 respostas

0

IMHO, você superou esse esforço.

Minha sugestão é para nós um simples 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
}

Como você já está solicitando apenas os tipos de arquivo específicos, isso ...

Senão {Write-Host "MKV ou MP4 não existe"}

... nunca será executado, não é necessário devido ao uso do seu filtro. O host de gravação nunca é necessário, a menos que você tenha um texto com código de cores ou outra formatação personalizada.

Isso ...

Write-Host "MKV ou MP4 não existe"

.. e isso ..

"MKV ou MP4 não existe"

... fará o mesmo. Envie texto para a tela, a outra opção é usar Write-Output contra o que você tem aqui.

    
por 27.05.2018 / 02:18
0

Eu criei este script, mas estou tendo problemas para fazer o loop quebrar em uma leitura falsa do conteúdo do arquivo quando ele desaparece da pasta após um loop

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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

o que estou fazendo é simular o arquivo mkv ou mp4 pesquisado ter sido removido depois de ter sido movido devido às funções, mas quando eu movo a pasta ele ainda acha que o arquivo está lá e não quebrará o loop

obrigado Connor bracegirdle

    
por 27.05.2018 / 10:36
0

Para obter a contagem real de arquivos mkv / mp4, coloque o gci na condição while (com a propriedade count)

$Files1 = "C:\Users\BRACEGIRDLE\Favorites\Desktop\MASTER_FOLDER_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
    
por 27.05.2018 / 15:27

Tags