Powershell使用Import-CSV进行奇怪的行为

时间:2018-05-07 11:51:12

标签: windows powershell csv import powershell-v3.0

我有以下powershell代码:

clear;
$importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;

Write-Host $importedIDs.Length;

for ($i=0; $i -lt $importedIDs.Length; $i++) {
  Write-Host $($importedIDs[$i]);
}

目标是只读取csv文件中的id列,如下所示:

"created";"id"
"2018-04-04 21:03:01";"123456"
"2018-04-04 21:03:01";"123457"

如果有两行或更多行,则输出符合预期:

2
123456
123457

但是当csv文件中只有1行(ID为123456的行)时,输出为:

6
1
2
3
4
5
6

所需的输出将是:

1
123456

任何人都可以解释为什么会这样,我该如何解决这个问题? 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

如果csv中有多行,则会得到一个字符串数组。每行一个数组元素。因此索引适用于行。如果只有一行,则不会得到包含一个字符串的数组,正如您可能期望的那样。你得到一个字符串。在字符串上使用索引时,PowerShell会将字符串视为字符数组,因此只返回一个字符。

答案 1 :(得分:0)

您可以稍微重写一下脚本,以解决J. Bergmann所描述的问题。

而不是使用for循环遍历数组中的每个元素,其中一个"元素"可以引用字符串数组中的字符串或字符串中的字符,您可以使用foreach循环并循环遍历数组中的元素。 foreach不会将字符串视为字符数组

clear;
$importedIDs = (Import-Csv "testing.csv" -Delimiter ';').id;

Write-Host $importedIDs.Length;

foreach ($importedID in $importedIDs) {
  Write-Host $($importedID);
}