![Columns UI 中的类似 Facet 的文件夹过滤器 - 仅显示第一级子文件夹](https://linux22.com/image/1501748/Columns%20UI%20%E4%B8%AD%E7%9A%84%E7%B1%BB%E4%BC%BC%20Facet%20%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E8%BF%87%E6%BB%A4%E5%99%A8%20-%20%E4%BB%85%E6%98%BE%E7%A4%BA%E7%AC%AC%E4%B8%80%E7%BA%A7%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9.png)
据我所知,方面(使用标准 UI)和列 UI 是互斥的。我想使用列 UI 来增加自定义功能,但缺少一个关键功能:仅过滤特定目录中的文件夹。使用过方面的人会知道,所有添加到
偏好设置媒体库->音乐文件夹
将会在方面部分很好地显示,没有子文件夹。
举个例子,假设我的媒体库路径为C:\Users\Me\mymusic
在名为的文件夹中mymusic
,我有 3 个子文件夹a
,分别名为b
和c
。其中还有许多其他不同艺术家的子文件夹。
我想要的是我的库中有一列文件夹,但只有根文件夹,在这个C:\Users\Me\mymusic\
例子中只有和a
。b
c
C:\Users\Me\mymusic\a(显示)
C:\Users\Me\mymusic\a\ed sheeran(未显示)
C:\Users\Me\mymusic\b\adele(未显示)
基本上,我需要一个字段代码,它可以在 Columns UI 中执行与 facets 相同的操作
答案1
您找错地方了。您可能想要一个具有正确搜索查询的自动播放列表。而这个列表很奇怪 :)
创建按特定文件夹预先过滤的自动播放列表
自动播放列表会自动添加和删除音乐文件。但前提是 Foobar 监控这些文件夹。因此,请确保将所有根文件夹添加到媒体库
通过以下方式打开媒体库搜索窗口
Menu Bar » Library » Search
输入搜索词组
"$sub($len(%PATH%),$len($replace(%PATH%,\,)))" IS 4
我基本上是在做:获取文件的完整路径并计算字符串的长度,即
C:\Users\Me\mymusic\a
21 个字符长。然后我第二次计算长度,但将所有
\
字符替换为空。我们的示例路径包含四个反斜杠\
,这些反斜杠将被删除。因此我们的第二个长度是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%)"
。否则,如果没有它们,您就无法组合查询语法和标题格式
创建一个新的自动播放列表,然后就好了。您只能看到第三层文件夹的音乐
答案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*]