如何将 Get-ChildItem 的一个结果存储为一个数组值?

如何将 Get-ChildItem 的一个结果存储为一个数组值?

我有一个名为 D:\MyDir 的文件夹,其内容如下:

PS D:\MyDir> gci


    Directory: D:\MyDir


Mode                LastWriteTime         Length Name
----                -------------         ------ ---- d-----       11/22/2021   8:10 PM                MyFolder-2021-11-22

我将按创建顺序排列的文件夹名称存储在 $Dirlist 中:

$Dirlist = gci $LBDestination | ? { $_.PSIsContainer } | sort CreationTime | select -Property Name | foreach { $_.Name }

我遇到的问题是系统将列表中的每个字母存储为数组中的一个值

PS D:\MyDir> $Dirlist[0..3]
M
y
F
o

当我有多个文件夹时,我的脚本运行良好。

答案1

这不是一个用于format-list处理数据的好习惯。format-list用于可视化输出。

相反,你应该告诉你的变量它肯定是一个数组,即使它只有一个值。你可以将它强制转换为一个,[string[]]或者将整个命令包装进去,@()这样在将它存储在变量中之前,它就变成了一个数组。

查看此处的区别:

如果有多个返回,您的方法有效,因为它自动是一个数组。但是,如果只有一个返回,它就不起作用,因为 PowerShell 认为您希望变量是一个字符串,因为您没有明确告诉它您希望它是一个数组:

PS C:\Install\mydir> $Dirlist = gci . | ? { $_.PSIsContainer } | sort CreationTime | select -ExpandProperty Name
PS C:\Install\mydir> $Dirlist[0..3]
M
y
F
o

您可以将其转换为数组并且它会起作用:

PS C:\Install\mydir> [string[]]$Dirlist = gci . | ? { $_.PSIsContainer } | sort CreationTime | select -ExpandProperty Name
PS C:\Install\mydir> $Dirlist[0..3]
MyFolder-2021-11-22

或者将整个命令包装在@()

PS C:\Install\mydir> $Dirlist = @(gci . | ? { $_.PSIsContainer } | sort CreationTime | select -ExpandProperty Name)
PS C:\Install\mydir> $Dirlist[0..3]
MyFolder-2021-11-22

顺便说一下,而不是

  • | select -Property Name | foreach { $_.Name }

只需使用

  • | select -ExpandProperty Name

答案2

我最后只是添加了一个格式列表(ft 是简短版本),它对我有用:

$Dirlist= gci $LBDestination | ? { $_.PSIsContainer } | sort CreationTime | select -Property Name | foreach { $_.Name } | fl

相关内容