使用Get-ChildItem
,我提取了一个符合条件的文件列表,然后split
是Basename
的一部分,并希望使用该部分名称构建一个数组。我可以成功地做到这一点,除了数组以长字符串返回。我希望数组的每一部分都在新行中返回。
脚本:
$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 (...)