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