Powershell循环检查方案


0

场景 - 我正在尝试检查文件扩展名(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功能,有人可以确认吗? 如果我要使用这个,那么我不知道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"

这是我应该在某种程度上工作的东西,显然需要调整和适应以满足我的需要,但我是在正确的球场使用这个作为“基地”或我需要使用别的东西吗?

非常感谢! Connor Bracegirdle

Answers:


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
}

由于您只是要求特定的文件类型,这...

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

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

这个...

写主机“MKV或MP4不存在”

.. 还有这个 ..

“MKV或MP4不存在”

......会做同样的事情。将文本发送到屏幕,另一个选项是使用写入输出与此处的对比。


感谢您的反馈,postanote ..但当你说'Else {write-host“mkv或mp4没有退出”} ...将永远不会执行,在我的脚本上是没有mkv或mp4文件文件夹?谢谢你的暗示。写主机位也是..这个每个函数在它已经完成一次之后会查找任何其他mkv mp4文件吗?因为如果文件夹中有更多内容,我想在每次操作完成时检查,然后重复,直到没有任何内容谢谢
Connor Bracegirdle

@ConnorBracegirdle如果你使用了无限 do while $True 循环它会不断报告 no file... 一旦呈现当前文件。更好地安排脚本间隔运行或使用文件观察器。
LotPings

这个脚本由Bittorrent激活..所以当一个文件完成它运行这个程序来重命名,转换,添加元数据等并移动到适当的文件夹..但是如果2个种子几乎完成,那么运行多个应用程序的元数据软件会出现问题同时它运行2个元数据软件。所以我希望它检查是否有更多的文件已经完成并移动到关闭之前的文件夹所以如果nessesary它可以重新循环
Connor Bracegirdle

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

谢谢 connor bracegirdle


您曾经设置过变量 $SearchTrue 与gci的内容。 while条件不会改变,所以它运行无穷无尽。读 get-help about_while
LotPings

我理解While函数的概念..但我希望变量仍然可以工作..我删除了“$ SearchTrue”并放置'Get-ChildItem -Recurse -Include .MKV, 进入While(条件)的.mp4 -Path $ Files1'好像有把戏!感谢帮助LotPing也试图将代码格式放入评论但我似乎无法让它工作
Connor Bracegirdle

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.