You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell新手求助:如何获取文件路径中第二个文件夹的唯一值

搞定PowerShell路径提取与去重问题

嘿,作为PowerShell新手碰到这种路径深度不一致的问题太正常了!别担心,我给你两个简单靠谱的方法,轻松提取你要的第二个文件夹名称并去重。

方法一:拆分路径组件(直观易懂)

这个方法直接把路径拆分成一个个部分,精准定位到你要的那一级文件夹:

Get-ChildItem -Path d:\domains -Recurse -Filter *.php | 
    ForEach-Object {
        # 把完整路径按反斜杠拆分成数组
        $pathSegments = $_.FullName -split '\\'
        # 取数组的第3个元素(索引从0开始:D:是0,domains是1,目标文件夹是2)
        $pathSegments[2]
    } | 
    Select-Object -Unique

为什么这么写?

  • $_.FullName -split '\\':把每个文件的完整路径拆分成数组,比如D:\domains\domain.com\httpdocs\...会变成@('D:', 'domains', 'domain.com', 'httpdocs', ...)
  • 索引[2]刚好对应domains后面的第一个文件夹,也就是你要的domain.com这类名称
  • Select-Object -Unique:自动去掉重复的条目,只保留唯一的文件夹名称

方法二:正则表达式匹配(适合复杂场景)

如果以后碰到更复杂的路径规则,用正则表达式会更灵活:

Get-ChildItem -Path d:\domains -Recurse -Filter *.php |
    ForEach-Object {
        # 匹配D:\domains\后面的第一个文件夹
        if ($_.FullName -match '^D:\\domains\\([^\\]+)') {
            # 提取捕获到的文件夹名称
            $matches[1]
        }
    } |
    Select-Object -Unique

正则说明:

  • ^D:\\domains\\:匹配路径开头的固定部分(注意反斜杠要转义成\\)
  • ([^\\]+):捕获第一个反斜杠之前的所有内容,也就是你要的文件夹名称
  • $matches[1]:取出正则匹配到的第一个捕获组内容

两种方法都能完美解决你的问题,新手推荐先试试第一种,逻辑更清晰好理解~

内容的提问来源于stack exchange,提问作者Pablo R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:28:52