关于 directory@psd 能否获取指定级数的子文件夹
大佬们,有一个功能需求不知道能否实现,如题,想获取指定文件夹下指定级数的子文件夹名及其里边的文件名。简单说,就是有一个文件夹 A,该文件夹下有 n 个名称为 An 的子文件夹 (第 1 级),然后这每一个 An 子文件夹里又有 n 个子文件夹 (第 2 级)…文件夹里套文件夹,俄罗斯套娃。想获取所有的第 n 级的子文件夹名或者里边包含的文件名。
了解到函数 directory@psd 可以递归获取所有子文件夹路径,举个例子,以下截图中获取的是一个名称为 A 的文件夹下的所有子文件夹路径,为了方便观察,其中做了一点截取,把主目录路径截断了:
这样操作很方便,但 directory 函数只有一个参数 directory(path),且递归时 @s 没有层级控制,一路到底,往往用力过猛。
那有没有可能实现这样的功能: =directory@psd(文件夹路径,n),
增加一个可选参数 n 用于控制递归层级,n 是 0 和正整数,n>0 时表示第 n 层文件夹,n=0 或者省略时表示不分层级。
还是以上述文件夹为例:
1、如果写成:=directory@psd(文件夹路径,0) 等同于 =directory@psd(文件夹路径)
2、如果写成:=directory@psd(文件夹路径,1),那就得到所有第 1 级文件夹名称:
3、如果写成:=directory@psd(文件夹路径,3),那就得到所有第 3 级文件夹名称:
4、如果写成:=directory@psd(文件夹路径,6),那就得到所有第 6 级文件夹名称:
以此类推。如果指定的 n 大于最深的层级,则返回 null。当然,如果路径中同时指定了文件的后缀名,比如 "*.btx",希望得到所有第 n 级子文件夹下的 btx 文件。
directory 已经很强了,如果能控制递归层级,自然是锦上添花。
就是这么个需求,恳请大佬们得闲时帮忙看看。
谢谢!
感谢作者,写出了我也想要实现的功能。
有时候项目资料很多,需要规范整理,分类,命名,
很希望 SPL 能够实现。
期待官方。
感谢作者提供我目前工作的需求,期待官方也能支持一下。
你们这几个看起来像在串通。
这玩意儿有什么用?实现都不困难,但这类似那个conj@r (…;n)一样,想不出啥实际用途。
功能设计,不是穷举参数的所有可能性,再小的功能也会有实现成本,一旦实现了也要持续维护。
而且,这些参数位也是不可再生,一旦被占用了,就很难再解释成其它意思。如果随便想出点需求就占了参数位,哪天发现更重要的需求时被被迫要让位。SPL 函数中事实上已有过少量这种别扭的情况了,要保持历史兼容性,也只好忍着。
所以,要让函数及参数尽量少,非必要不添加。有个设计原则叫最小完备。它要够用,还要最小。Python 对这个原则贯彻得就很不好,搞出一堆大体上重复却又不太一样的东西,学习成本其实很高。
是不是必要,要用实际问题来评估权衡,如果没有它,会给实际工作造成多大麻烦。暂时想不出啥实际用途的需求,就放那里记着吧。
😄 😄 抱歉,老贼,啥事都逃不过您慧眼。
楼下几个确实是在群里一起学习的朋友,我发帖之前在群里喊了一声,所以就响应了一下。
当然,绝不是故意找人来抬杠耽误您时间,给您添乱。发帖求助,也绝不是无中生有,没事找事。
起因是这样的,有朋友求助说,要把某个文件夹下所有的 3 级文件夹改名称,因为涉及到一定的数量,一个一个改比较麻烦。当然,这种需求可以借助于一些特定的工具或者 VBA,反正方法不止一种,总能殊途同归,达成目标。我就想到了 SPL 里 directory 和 movefile,简短几句就搞定了,朋友们都惊叹于 SPL 的神奇简洁高效。因为是出于兴趣学习,并不是单纯的为了解决问题而解决问题,我就想着还有没有更简洁的方式来实现这个需求,于是就想到了递归层级的控制,如果函数里能指定层级,自然就更加简洁了,不用再多一步去筛选,所以就有了此帖。
发帖之前心里也犯过嘀咕,这个功能跟之前求助过的 conj@r 几乎是一样的,但 conj@r 控制层级用到的地方确实不多,而这个定位第几级文件夹平时多少还能用到一些,想了一下,又翻了一下函数文档,发现 directory 参数只有一个,自己觉得加个参数应该无碍全局,所以,还是发帖求助了,这些都是我的主意。😄 还望大神见谅。🙏
对于程序的设计,我就是一个门外汉,我所有的认知都停留在程序的应用层面,相信跟我一样的小白都是这样的,追求高效简洁多功能,SPL 在这一方面确实很出色。我求助增加函数功能,完全是出于对 SPL 的认同和热爱,我现在就是 An avid fan of SPL😄 ,当一个人变成某个东西的狂热粉丝,会总想着让这个东西变得自己心里想的那样出色,这是出于粉丝的初心😄
至于这个需求到底有多少实际用途,我还真说不出来,反正不控制层级也能实现,若能控制层级就能优雅地实现。
Anyway,You are the boss,全凭您做主😄 🙏
Last but not the least,发帖求助不是为了抬杠起哄,是完全出于对 SPL 的热爱😄 Peace!
😄 老贼好。
居然被您发现了,略显尴尬。
我们可能把问题想简单了,普通用户和专业开发者对问题的思考角度是不一样的。看了您的解释,才知道开发一个参数要考虑这么多。也看得出您的专业素养,值得晚辈学习。
我们一如既往地喜欢 SPL,以后尽量提出一些有建设性的问题。
感谢您的关注和回复。😄