Columns UI 中的类似 Facet 的文件夹过滤器 - 仅显示第一级子文件夹

Columns UI 中的类似 Facet 的文件夹过滤器 - 仅显示第一级子文件夹

据我所知,方面(使用标准 UI)和列 UI 是互斥的。我想使用列 UI 来增加自定义功能,但缺少一个关键功能:仅过滤特定目录中的文件夹。使用过方面的人会知道,所有添加到

偏好设置媒体库->音乐文件夹

将会在方面部分很好地显示,没有子文件夹。

举个例子,假设我的媒体库路径为C:\Users\Me\mymusic在名为的文件夹中mymusic,我有 3 个子文件夹a,分别名为bc。其中还有许多其他不同艺术家的子文件夹。

我想要的是我的库中有一列文件夹,但只有根文件夹,在这个C:\Users\Me\mymusic\例子中只有和abc

C:\Users\Me\mymusic\a(显示)
C:\Users\Me\mymusic\a\ed sheeran(未显示)
C:\Users\Me\mymusic\b\adele(未显示)

基本上,我需要一个字段代码,它可以在 Columns UI 中执行与 facets 相同的操作

图片在这里

答案1

您找错地方了。您可能想要一个具有正确搜索查询的自动播放列表。而这个列表很奇怪 :)


创建按特定文件夹预先过滤的自动播放列表

  1. 自动播放列表会自动添加和删除音乐文件。但前提是 Foobar 监控这些文件夹。因此,请确保将所有根文件夹添加到媒体库

  2. 通过以下方式打开媒体库搜索窗口Menu Bar » Library » Search

    在此处输入图片描述

  3. 输入搜索词组"$sub($len(%PATH%),$len($replace(%PATH%,\,)))" IS 4

    • 我基本上是在做:获取文件的完整路径并计算字符串的长度,即C:\Users\Me\mymusic\a21 个字符长。

    • 然后我第二次计算长度,但将所有\字符替换为空。我们的示例路径包含四个反斜杠\,这些反斜杠将被删除。因此我们的第二个长度是21 - 4 = 17

    • 现在我从第一个(较长)值中减去第二个(较小)值,并将结果与​​ x 进行比较,其中 x 代表您想要的文件夹级别(实际上多了一个,因为我很懒,用了,%PATH%而不是$directory(%PATH%)更短的查询公式)

    • 最后你只需要数一下你的斜线。
      C:\Users\Me\mymusic\a有 3 个文件夹和 4 个反斜线 » Diff IS 4» 显示 C:\Users\Me\mymusic\a\ed sheeran有 4 个文件夹和 5 个反斜线 » Diff IS NOT 4» 未显示

    • 阅读查询语法标题格式参考。一切都在那里。唯一没有明确提到的是:在函数和字段参数的组合周围使用双引号,例如"$directory_path(%PATH%)"。否则,如果没有它们,您就无法组合查询语法和标题格式

  4. 创建一个新的自动播放列表,然后就好了。您只能看到第三层文件夹的音乐

在此处输入图片描述

答案2

可能之前就应该发布这种方式,但是对于任何对这个解决方案感兴趣的人来说,nixda 的计数方法\来确定目录级别非常有效!

[LEVEL*]只要记住用下面的实际代码替换即可:)

//declare relative path by removing certain strings from absolute path (for example, C:\Music\)
$puts(rpath,$replace(%path%,C:\Music\,))

//count directory levels by comparing length of path with and without \
$sub($len($get(rpath)),$len($replace($get(rpath),\,)))

//save number of levels in variable named 'level'
$puts(level,$sub($len($get(rpath)),$len($replace($get(rpath),\,))))

//get directory names of any level below 'rpath'

[LEVEL0] = 
$directory($get(rpath),$sub($get(level),0))

[LEVEL1] = 
$directory($get(rpath),$sub($get(level),1))

[LEVEL2] = 
$directory($get(rpath),$sub($get(level),2))

COMPACTIFIED CODE:
//available variables: rpath, level
$puts(rpath,$replace(%path%,E:\Samples\,))$puts(level,$sub($len($get(rpath)),$len($replace($get(rpath),\,))))[LEVEL*]

相关内容