regex - Powershell中的路径和字符串斩波

标签 regex string powershell path case-sensitive

我正在做一些涉及一些自动文件移动的工作,这些文件包含必须维护的相对路径。不幸的是,我发现System.IO.Path,System.String和Powershell运算符提供的功能有些不足,无法正常处理我的工作。

对我来说非常有用的一个功能是路径减法的概念,它在理论上像减 vector 一样有效。从概念上讲,AB为您提供了从B到A的路径。在应用程序中,为D:\A\B\C\D - D:\A\B\ = \C\D。同样,在这种情况下为D:\A\B\ - D:\A\B\C\D = \..\..。我现在可以接受,只有当一条路径完全包含在另一条路径中时,这才有意义。

这似乎包括两个步骤:1)确定是否包含另一条路径。 2)从包含路径中删除包含路径。 3)(可选)根据操作的侧面,用父..符号替换文件夹名称。

由于我关心NTFS,因此需要包含和替换操作均不区分大小写。为了进行遏制,我可以使用选择字符串,因为它不区分大小写,并允许使用-simple开关,该开关使我可以使用路径而无需将其分开以将其转义为正则表达式。

不过,从另一个字符串中删除该字符串会比较烦人。 System.IO.Path对此无能为力,System.String的相关方法都区分大小写,并且powershell的运算符都需要按摩,以便正则表达式可以匹配。

所有这一切似乎比应做的工作还要多-我缺少任何工具可以更好地解决此问题吗?

最佳答案

  • 确定是否包含-将您的路径转换为绝对路径(如果尚未转换)。您可以为此使用Resolve-Path。然后,您可以使用$ path1.StartsWith($ path2,'OrdinalIgnoreCase')来测试是否包含。
  • 删除包含的路径-$ path1.Substring($ path2.length)
  • 用...替换父文件夹名称-尽管我没有让正则表达式浮出水面,但我敢肯定您可以使用PowerShell的-replace运算符
  • 通过正则表达式搜索/替换来完成此操作

    关于regex - Powershell中的路径和字符串斩波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938759/

    相关文章:

    python - MongoDB 查询对嵌套元素的行为不符合预期

    regex - clojure 相当于 ruby​​ 的 gsub

    android - 如何在android中获取和设置字符串资源值

    powershell - Powershell通过文本文件循环并按冒号分割

    windows - 如何根据列号分隔固定宽度的文本文件

    java - 某些字符的正则表达式

    python - 如何只匹配其中只有数字的单词周围的引号?

    C# 字符串长度返回错误的数量

    string - 在 Go 中执行 http 请求时字符串出现乱码

    .net - 为什么将PSObject添加到Powershell中的ArrayList需要这么长时间?有更好的方法吗?