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
相关产品推荐
相关产品推荐

