将新列写入CSV

将新列写入CSV,csv,powershell,Csv,Powershell,我正在尝试在CSV中编写一些新数据,并且已经能够完成我需要的任务,但没有我希望的那么优雅,我想知道这里是否有人对清理我的代码有任何建议 目标是获取一个CSV,在标题“代码”下有一长串6位数字,创建一个名为“部门代码”的新列,并仅将“代码”字段的前2位数字分配给该新列 以下是我目前拥有的: $Importcsv = import-csv C:\test.csv # This takes the named CSV and adds the column "DivisionCode" to th

我正在尝试在CSV中编写一些新数据,并且已经能够完成我需要的任务,但没有我希望的那么优雅,我想知道这里是否有人对清理我的代码有任何建议

目标是获取一个CSV,在标题“代码”下有一长串6位数字,创建一个名为“部门代码”的新列,并仅将“代码”字段的前2位数字分配给该新列

以下是我目前拥有的:

$Importcsv = import-csv C:\test.csv 

# This takes the named CSV and adds the column "DivisionCode" to the end then
# writes back to the same CSV
$Importcsv | Select-Object *,@{Name='DivisionCode';Expression={''}} |
  Export-Csv C:\test.csv -NoTypeInformation

$Importcsv = import-csv C:\test.csv

foreach ($Number in $Importcsv) {
  $Code = $Number.Code
  $DivisionCode = $Code -replace ".{4}$"
  if ($Number.DivisionCode -like "") {
    $Number.DivisionCode = $DivisionCode
  }
}

$Importcsv | Export-Csv c:\RESONE\test2.csv -NoTypeInformation -Encoding ASCII
当我将其作为单个脚本运行时,最终结果就是我想要的,但它会为每一行抛出一个错误。据我所知,它反复尝试创建新列?这对我来说没有意义,因为列创建在ForEach循环之外?它抛出的错误如下所示:

Select-Object : Property cannot be processed because property "DivisionCode" already exists. At C:\Trim2.ps1:4 char:30 + $Importcsv | Select-Object <<<< *,@{Name='DivisionCode';Expression={''}} | Export-Csv C:\test.csv + CategoryInfo : InvalidOperation: (@{FirstName=Mad... DivisionCode=}:PSObject) [Select-Object], PSArgumentException + FullyQualifiedErrorId : AlreadyExistingUserSpecifiedPropertyNoExpand,Microsoft.PowerShell.Commands.SelectObjectCommand 选择对象:无法处理属性,因为属性“DivisionCode”已存在 存在。 在C:\Trim2.ps1:4 char:30
+$Importcsv |根据错误消息选择对象,CSV在首次导入时已经有一列
DivisionCode
。将
-Exclude division code
添加到
选择对象
以将其替换。此外,您不需要重复导入/导出。一气呵成:

Import-Csv 'C:\test.csv' |
  Select-Object *,@{n='DivisionCode';e={$_.Code -replace '.{4}$'}} -Exclude DivisionCode |
  Export-Csv 'C:\RESONE\test2.csv' -NoType -Encoding Ascii

嗯,有可能我已经运行了添加新列的代码,当我让它抛出错误时,这肯定可以解释它。这将是一个脚本,在csv的定期新版本上运行,该版本将没有列开始。
e={$\.code-replace.{4}$}
是我不知道怎么做的部分。我将尝试学习
selectobject
格式,以了解其工作原理。我对
-Exclude division code
的理解正确吗?只有当列已经存在时(我知道它不会存在)才需要
-Exclude
排除属性(如果它存在),否则它什么也不做。明白了。我试着按照你的建议一次完成这一切,省略了
-Exclude
部分,效果非常好;当我犯了那么多错误时,我一定已经在考试中有了专栏。谢谢你的帮助!这是我第一次进入PowerShell,所以我知道有些东西我忽略了。