使用Import csv并将一列的多个值存储为变量



我有一个csv文件,它有一个名为"art"的列:

sequence art last  first  address city st     zip
-------- --- ----  -----  ------- ---- --     ---
1        3S  Doe   John   123     Any  Street AnyTown
6        3S  Doe   John   128     Any  Street AnyTown
2        OG  Dow   Jane   124     Any  Street AnyTown
7        OG  Dow   Jane   129     Any  Street AnyTown
3        OGF Cool  Joe    125     Any  Street AnyTown
8        OGF Cool  Joe    130     Any  Street AnyTown
4        SLV Cool  Carol  126     Any  Street AnyTown
9        SLV Cool  Carol  131     Any  Street AnyTown
5        SMP Bravo Johnny 127     Any  Street AnyTown
10       SMP Bravo Johnny 132     Any  Street AnyTown

我正在寻找一种将"art"列的值存储到变量中的方法。请耐心等待,因为我仍在学习PowerShell。这是我迄今为止的代码:

If (Test-Path D:mhWork_Auto_Printc1478_tpl_snapdataArt_cProofs.csn){
$source=Get-ChildItem "D:mhWork_Auto_Printc1478_tpl_snapdataArt_cProofs.csn" | select  -Last 1
$artTag = 'D:mhWork_Auto_Printc1478_tpl_snapdataArt_cProofs.csn'
$artTag1 = Import-Csv $artTag | Select-Object -ExpandProperty art -First 1
$artTag2 = Import-Csv $artTag | Select-Object -ExpandProperty art -Second 2
$artTag3 = Import-Csv $artTag | Select-Object -ExpandProperty art -Third 3
$artTag4 = Import-Csv $artTag | Select-Object -ExpandProperty art -Fourth 4
$artTag5 = Import-Csv $artTag | Select-Object -ExpandProperty art -Fifth 5
$JobID = "TPL_" + ($aJobNum)
If (Test-Path cProofs0001.pdf){
Rename-Item cProofs0001.pdf "$($JobID)_$($artTag1)_cProofs.pdf"}
If (Test-Path cProofs0002.pdf){
Rename-Item cProofs0002.pdf "$($JobID)_$($artTag2)_cProofs.pdf"}
If (Test-Path cProofs0003.pdf){
Rename-Item cProofs0003.pdf "$($JobID)_$($artTag3)_cProofs.pdf"}
If (Test-Path cProofs0004.pdf){
Rename-Item cProofs0004.pdf "$($JobID)_$($artTag4)_cProofs.pdf"}
If (Test-Path cProofs0005.pdf){
Rename-Item cProofs0005.pdf "$($JobID)_$($artTag5)_cProofs.pdf"}
}

正如您在"art"列中看到的,有5个不同的值。代码运行良好,直到我通过$artTag1。所需的结果是重命名以下文件。

cProofs0001.pdf - to - 123456_TPL_3S_cProofs.pdf
cProofs0002.pdf - to - 123456_TPL_OG_cProofs.pdf
cProofs0003.pdf - to - 123456_TPL_OGF_cProofs.pdf
cProofs0004.pdf - to - 123456_TPL_SLV_cProofs.pdf
cProofs0005.pdf - to - 123456_TPL_SMP_cProofs.pdf

我想我可能需要使用get content或for each循环。

# load the entire csv into a variable
$csvFilepath = 'D:mhWork_Auto_Printc1478_tpl_snapdataArt_cProofs.csn'
$csvContent = Import-Csv -Path $csvFilepath
# get the values of the art column like you did with -ExpandProperty
$artValues = $csvContent | Select-Object -ExpandProperty art
# de-duplicate the list
$artTags = $artValues | Group-Object | Select-Object -ExpandProperty Name
# use array indexing to reference values in list
$JobID = "TPL_" + ($aJobNum) # unclear where $aJobNum comes from
If (Test-Path cProofs0001.pdf){
Rename-Item cProofs0001.pdf "$($JobID)_$($artTags[0])_cProofs.pdf"}
If (Test-Path cProofs0002.pdf){
Rename-Item cProofs0002.pdf "$($JobID)_$($artTags[1])_cProofs.pdf"}
If (Test-Path cProofs0003.pdf){
Rename-Item cProofs0003.pdf "$($JobID)_$($artTags[2])_cProofs.pdf"}
If (Test-Path cProofs0004.pdf){
Rename-Item cProofs0004.pdf "$($JobID)_$($artTags[3])_cProofs.pdf"}
If (Test-Path cProofs0005.pdf){
Rename-Item cProofs0005.pdf "$($JobID)_$($artTags[4])_cProofs.pdf"}
}

我不清楚CCD_ 1&等等以及CCD_ 2列中的值。唯一确定cProofs0001.pdf3S关联的是.csv文件中的行顺序。顺序总是一样吗?

最新更新