Powershell 循环检查场景

Powershell 循环检查场景

场景 - 我正在尝试检查文件扩展名(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"}

我想我需要使用 Do While 函数,有人可以确认一下吗?如果我要使用这个函数,那么我不知道如何启动 do。

我发现可以研究和学习的脚本如下

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

这是我在某种程度上应该处理的事情吗,显然我需要提高和适应以满足我的需求,但我是否在正确的范围内将其用作“基础”,或者我需要使用其他东西?

非常感谢!Connor Bracegirdle

答案1

依我之见,你把这个努力变得过于复杂了。

我的建议是使用一个简单的 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
}

由于您已经仅询问特定文件类型,因此......

否则 {Write-Host "MKV 或 MP4 不存在"}

...永远不会执行,因为使用了过滤器,所以不需要执行。除非您要对文本进行颜色编码或其他自定义格式,否则永远不需要写入主机。

这...

Write-Host“MKV 或 MP4 不存在”

.. 和这个 ..

“MKV 或 MP4 不存在”

… 将执行相同的操作。将文本发送到屏幕,另一个选项是使用 Write-Output,而不是您在此处所用的内容。

答案2

我已经想出了这个脚本,但是当文件内容在循环后从文件夹中消失时,我无法让循​​环因错误读取文件内容而中断

$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 文件由于函数原因被移动后被删除,但是当我移动文件夹时它仍然认为文件在那里并且不会中断循环

谢谢 connor bracegirdle

答案3

要获取 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

相关内容