Powershell构建数组,每个项目都有一行新行



使用Get-ChildItem,我提取了一个符合条件的文件列表,然后splitBasename的一部分,并希望使用该部分名称构建一个数组。我可以成功地做到这一点,除了数组以长字符串返回。我希望数组的每一部分都在新行中返回。

脚本:

$files = GCI "\Paths" -Recurse | Where-Object {$_.LastWriteTime -ge (Get-Date).Adddays(-22)}
$name = ""
foreach($file in $files){
$file = $file.basename.Split(".")[0]
$array += $file    
}

我也尝试了以下没有运气:

$files = GCI "\Paths" -Recurse | Where-Object {$_.LastWriteTime -ge (Get-Date).Adddays(-22)}

$name = ""

foreach($file in $files){
$file = $file.basename.Split(".")[0]
$array+= $file -split "`n"        
}

调用$array:时的当前结果

file01file02file03file04

调用$array:时所需的结果

file01    
file02    
file03 
file04

返回字符串是因为$array不是数组。它是在赋值时键入的,它的第一个赋值是字符串。因此,它不断向该字符串追加新值。

您可以执行以下操作:

$array = foreach($file in $files){
$file.basename.Split(".")[0]
}

当foreach语句中输出迭代值时,该语句输出可以捕获到变量中。每个值都将是一个数组的一个元素。

顺便说一句,向数组添加元素的+=语法效率低下,因为每次检索当前数组的所有内容后都会创建一个新数组。

您已经返回了一个数组,所以只需将其缩小到分配给变量的值即可。

$files = GCI "\Paths" -Recurse | 
Where-Object {$_.LastWriteTime -ge (Get-Date).Adddays(-22)} | 
ForEach-Object -Process {
$_.basename.Split(".")[0]
}

或者,只需为foreach循环分配一个变量,即可将输出移除到数组

$arr = foreach (...)

最新更新