如何用PowerShell拆分CSV的Path列并区分文件与文件夹
解决CSV路径列的文件/文件夹标记问题
核心需求
处理CSV中Path列,以最后一个反斜杠为分界,判断后方内容是否含点:含点标记为File(文件),不含则标记为Folder(文件夹)。
修正后的完整代码
# 导入目标CSV文件 $CSVImport = Import-Csv -Path "你的CSV文件路径.csv" $Result = foreach($CSVLine in $CSVImport){ $CSVLine | Select-Object -Property *, @{ Name = 'Type'; Expression = { # 用.NET方法可靠获取路径最后一段(自动处理末尾反斜杠情况) $lastSegment = [System.IO.Path]::GetFileName($_.Path) # 判断是否包含点,返回对应标记 if ($lastSegment -match '\.') { "File" } else { "Folder" } } } } # 预览结果 $Result | Format-Table -AutoSize # 导出标记后的新CSV $Result | Export-Csv -Path "标记完成的CSV文件.csv" -NoTypeInformation -Encoding UTF8
关键说明
路径分段的可靠方法:
用[System.IO.Path]::GetFileName()替代手动拆分,能自动处理路径末尾带反斜杠的异常场景,比-split '\\'更鲁棒。判断逻辑简化:
也可以用PowerShell三元运算符缩短代码,将Expression块替换为:Expression = { $lastSegment = [System.IO.Path]::GetFileName($_.Path) $lastSegment -match '\.' ? "File" : "Folder" }原代码问题修正:
- 原代码中
($_.Path -split "\")[-2]取的是倒数第二段内容,不符合需求,若坚持用split应改为[-1]; - 补充了完整的判断逻辑,实现标记值的正确返回。
- 原代码中
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

