如何用PowerShell拆分CSV并添加Modified_Id列提取指定ID
问题描述
我有一个包含多列的CSV文件,其中存在名为Exported_Id的列,其值示例为:
f36b9decc73e40bfb9a6250198a83fc0/SharePoint/source_28D4CE4DFC53AABB34B41E17BE9DEBBC/item__6761c90b-c1e0-4a91-b72c-e044e5b8cc56_1.0
需要从中拆分出中间的UUID部分(6761c90b-c1e0-4a91-b72c-e044e5b8cc56),将其添加到名为Modified_Id的新列中,并保留原有所有列导出为新的CSV文件。我尝试了以下PowerShell代码但遇到问题:
$CSVImport = Import-CSV $Global:Advance_CSV foreach($CSVLine in $CSVImport){ $CSVExportedID = $CSVLine.Exported_Id $Modified_Id= $CSVExportedID -split "__" Select-Object $Modified_Id, "Modified_Id" | Export-Csv $ModifiedFile }
解决方法
原代码存在三个核心问题:拆分逻辑未精准定位UUID、未保留原有列、循环内重复导出会覆盖文件。修正后的代码如下:
# 导入目标CSV文件 $CSVImport = Import-CSV $Global:Advance_CSV # 批量处理每一行数据,添加新列 $processedData = $CSVImport | ForEach-Object { # 两次拆分提取UUID:先按__分割取第二部分,再按_分割取第一部分 $uuid = ($_.Exported_Id -split "__")[1] -split "_" | Select-Object -First 1 # 保留原有所有列,新增Modified_Id列并赋值UUID $_ | Select-Object *, @{Name='Modified_Id'; Expression={$uuid}} } # 将处理后的数据导出到新CSV文件 $processedData | Export-Csv -Path $ModifiedFile -NoTypeInformation
关键说明
- 拆分逻辑:通过
__分割后取索引为1的元素,再用_分割取首段,精准提取UUID - 列保留:
Select-Object *确保原有所有列不丢失,通过计算属性@{Name='Modified_Id'; Expression={$uuid}}添加新列 - 导出优化:一次性导出所有处理后的数据,避免循环内重复导出导致的文件覆盖问题,
-NoTypeInformation参数可移除CSV开头的类型注释
内容的提问来源于stack exchange,提问作者aasenomad
相关产品推荐
相关产品推荐

