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

使用PowerShell按部门号规则将CSV列值复制至新列

PowerShell处理CSV:按部门编号规则新增列并填充值

我有一个包含4列的CSV文件,需要根据DepartmentNumber列的规则(部门编号以8开头),将Costs列的值复制到新增的CorpCosts列中。

原始CSV内容

Employee IDOwnerEmailDepartmentNumberCosts
fg345test@mail.com88944654.45
78f54test2@mail.co34534994.15

预期处理结果

Employee IDOwnerEmailDepartmentNumberCostsCorpCosts
fg345test@mail.com88944654.454654.45
78f54test2@mail.co34534994.15

尝试的错误代码

$corpcosts= foreach($corpcost in $CSVImport.corpcosts){
        if($CSVImport.DepartmentNumber -eq "8*"){
            $CSVImport.DepartmentNumber + $CSVImport.Costs 
        }
    }
           
$CSVImport|Select-Object *, @{N= 'CorpCosts'; E={$corpcosts[$_.CorpCosts]}} |Export-Csv "$Env:temp/$OutputFile" -NoTypeInformation 

错误分析

  1. 遍历的$CSVImport.corpcosts不存在,原始CSV无此列,循环无法执行
  2. 使用-eq "8*"做匹配,-eq是精确匹配,无法识别通配符,应改用-like
  3. 引用全局的$CSVImport而非当前行对象$_,无法逐行判断条件
  4. 错误拼接部门编号和成本值,需求仅需复制Costs列的值

正确解决方案

# 导入目标CSV文件
$CSVImport = Import-Csv -Path "你的CSV文件路径.csv"

# 处理数据并导出结果
$CSVImport | Select-Object *, @{
    Name = 'CorpCosts'
    Expression = {
        # 逐行判断部门编号是否以8开头,满足则返回Costs值,否则返回空
        if ($_.DepartmentNumber -like "8*") { $_.Costs }
    }
} | Export-Csv -Path "$Env:temp/$OutputFile" -NoTypeInformation

代码说明

  • Import-Csv:读取CSV文件并转换为PowerShell对象集合
  • Select-Object *:保留原有的所有列
  • 计算属性@{Name='CorpCosts'; Expression={...}}:新增CorpCosts列,通过表达式逻辑填充值
  • -like "8*":匹配以8开头的字符串,实现规则判断
  • Export-Csv:将处理后的对象集合导出为CSV文件,-NoTypeInformation避免生成多余的类型信息行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:17