【问题标题】:Array element types vary depending quantity of elements [duplicate]数组元素类型因元素数量而异[重复]
【发布时间】:2017-08-01 11:11:33
【问题描述】:

我正在尝试根据文件夹中的 csv 文件数填充数组。到目前为止,这是我的代码:

CD "\\domain\folder\file drop location"
$Array = Get-ChildItem -Filter *.csv | 
       Where-Object {-not $_.PsIsContainer} | 
       Foreach-Object {$_.Name}
$Array[0]

这会根据文件夹中 .csv 文件的数量返回不同的值。如果只存在 1 个 csv,则 $Array[0] 返回文件名的第一个字符(我不想要这个)。如果有多个 csv 文件,那么它会返回整个文件名(我想要这个)。如何使数组接受单个文件作为 1 元素数组?

编辑 除非您认为不了解 PowerShell 的业余爱好者/学习者不知道如何表达问题,否则可以将此问题视为重复问题。我对问题的解释使我找到了几十页,这些页面回答了其他问题,而不是我的问题。

【问题讨论】:

  • $Array[0] -> @($Array)[0]$Array = ... -> $Array = @(...)
  • 把它作为答案,我会标记它
  • [array]$Array =

标签: arrays powershell csv


【解决方案1】:

您可以在创建变量时将其转换为数组,然后它将始终是数组,即使只有一个结果。

[array]$Array = Get-ChildItem -Filter *.csv | 
       Where-Object {-not $_.PsIsContainer} | 
       Foreach-Object {$_.Name}

【讨论】:

  • 我更喜欢这个,尽管所有这些答案似乎都有效
【解决方案2】:

强制结果类型为@( , ( command ) )

$Array = @(, (Get-ChildItem -Filter *.csv | 
       Where-Object {-not $_.PsIsContainer} | 
       Foreach-Object {$_.Name}))

即使没有找到.csv 文件,结果类型也将是一个数组(但$Array.Count 将为0,因此$Array[0] 会引发错误)。

强制将结果类型设置为, ( command ) 且未找到.csv 文件,则$Array.Count 为1,$Array[0]$nul

$Array = , (Get-ChildItem -Filter *.csv | 
       Where-Object {-not $_.PsIsContainer} | 
       Foreach-Object {$_.Name})

【讨论】:

  • 你为什么在@()中使用额外的,()
  • @PetSerAl 对不起,我不记得我在哪里看到过这样的前导逗号推荐:(当时似乎是个好主意。
猜你喜欢
  • 2013-09-12
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多