我正在做一些涉及一些自动文件移动的工作,这些文件包含必须维护的相对路径。不幸的是,我发现System.IO.Path,System.String和Powershell的运营商提供的设施有点不足以正常处理我的工作。
对我来说非常有用的一个函数是减法路径的概念,理论上就像减去向量一样。从概念上讲,A - B为您提供从B到A的路径。在路径的应用程序中,D:\A\B\C\D - D:\A\B\ = \C\D
。同样,在这种情况下D:\A\B\ - D:\A\B\C\D = \..\..
。我现在可以接受,只有当一条路径完全包含在另一条路径中时,这才有意义。
这似乎包括两个步骤:1)确定在另一个路径中包含一个路径。 2)从包含路径中删除包含的路径。 3)(可选)根据操作的侧面性,用父..符号替换文件夹名称。
由于我关注NTFS,我需要对包含和替换操作都不区分大小写。对于包含,我可以使用select-string,因为它不区分大小写,并且允许-simple开关,它允许我使用路径而不将它分开以将它们转义为正则表达式。
从另一个中删除字符串虽然有点烦人。 System.IO.Path没有任何内容,System.String的相关方法都是区分大小写的,而powershell的操作符都需要按摩,以便正则表达式匹配。
所有这些看起来都比应该做的更多 - 是否有任何我想念的工具可以更好地处理这个问题?
答案 0 :(得分:2)
filedirectorypath可能会提供您需要的内容
这不是PowerShell特定的API,但是没有理由不在PowerShell中使用它。
答案 1 :(得分:2)
确定遏制 - 将路径转换为绝对路径(如果尚未转义)。您可以使用Resolve-Path。然后你可以使用$ path1.StartsWith($ path2,'OrdinalIgnoreCase')来测试遏制。
删除包含的路径 - $ path1.Substring($ path2.length)
用...替换父文件夹名称 - 虽然我没有正面的正则表达式,但我很确定你可以使用PowerShell的-replace进行正则表达式搜索/替换操作