【问题标题】:Import and parse specific data from CSV-file by using PowerShell使用 PowerShell 从 CSV 文件导入和解析特定数据
【发布时间】:2022-01-05 11:41:56
【问题描述】:

大家好,2022 年最好的祝愿!

我有以下 CSV 文件:

Name,EmployeeID,File
JohnDoechebox,0009001,ImageBig1.png
JohnDoechebox,0009001,ImageBig2.png
JohnDoechebox,0009001,ImageFlat1.jpg
JohnDoechebox,0009001,ImageFlat2.jpg
JaneJefferson,0009006,IntDoc.docx
JaneJefferson,0009006,IntDoc2.docx
JaneJefferson,0009006,IntImage.jpg
JaneJefferson,0009006,ExtImage.jpg

我想导入 CSV 文件,我可以使用 Import-CSV 来完成。然后我想foreach 导入的 CSV 文件,以便解析所有行。

我已经测试了一下,我想出了以下内容:

$Name = @()
$EmployeeID = @()

# Importing the CSV file and fill the array

Import-Csv -Path "C:\Temp\TestNew.csv" |`
    ForEach-Object {
        $Name += $_."Name"
        $EmployeeID += $_."EmployeeID"

    Write-Host "Your name is $($_.Name) and your Employee ID is $($_.EmployeeID)"

    }

这按预期工作。所以现在我想构建它,以便我可以根据 EmployeeID 获取该特定用户的所有文件(因为名称可以重复,EmployeeID 始终是唯一的)并通过Write-Host 输出文件。像这样:

Write-Host "Your name is $($_.Name) and your Employee ID is $($_.EmployeeID)" You have the following files:

稍后我还想对每个文件执行一个操作以将其复制到某处。

任何帮助将不胜感激!提前致谢!

【问题讨论】:

  • 好人,非常感谢!这似乎做得很好:` $List = Import-Csv 'C:\Temp\TestNew.csv' | Group-Object EmployeeID foreach ($User in $List) { Write-Host "您的名字是 $($User.Group.Name[0]) 并且您的员工 ID 是 $($User.Name) ,您有以下文件:" $User.Group.File } ` 我不明白的是:为什么$($User.Name) 输出EmployeeID?我做了一些更改,还根据“名称”列创建了一个文件夹,并将用户的文件(通过使用 EmployeeID)复制到该特定文件夹。
  • 对不起,我在评论中的标记被破坏了,我知道为什么

标签: arrays powershell csv parsing import-csv


【解决方案1】:

可以按如下方式完成

$list = import-csv 'C:\Temp\TestNew.csv' | Group-Object EmployeeID
foreach ($user in $list){

Write-Host "Your name is $($user.group.name[0]) and your Employee ID is $($user.Name) , You have the following files:"

$user.Group.file

}

【讨论】:

  • 好人,非常感谢!这似乎做得很好: $List = Import-Csv 'C:\Temp\TestNew.csv' | Group-Object EmployeeID foreach ($User in $List) { Write-Host "您的名字是 $($User.Group.Name[0]) 并且您的员工 ID 是 $($User.Name) ,您有以下文件:" $User.Group.File } 我不明白的是:为什么 $($User.Name) 输出 EmployeeID?我做了一些更改,还根据“名称”列创建了一个文件夹,并将用户的文件(通过使用 EmployeeID)复制到该特定文件夹。
  • 感谢某人提供有用答案的正确方法是对其进行投票和/或标记为解决方案。
  • 要知道Why does the $($User.Name) outputs the EmployeeID?,您需要查看变量$list 的值,因为我们根据属性Nameemployeeid 对输出进行分组
  • @Doug Maurer,感谢您的评论
【解决方案2】:

要获取具有特定 EmployeeID 值的所有文件,请使用 Group-Object cmdlet 按该特定列对 CSV 中的条目进行分组:

Import-Csv -Path "C:\Temp\TestNew.csv" |Group-Object EmployeeID |ForEach-Object {
    # Get the whole list of file names
    $groupOfFileNames = $_.Group |ForEach-Object File
    # Pick the name from the first entry in the grouped list
    $userName = $_.Group[0].Name

    Write-Host "Your name is $($_.Name) and your Employee ID is $($_.EmployeeID)" 
    Write-Host "You have the following files: [$($groupOfFileNames -join ', ')]"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多