ForEach-Object 以某种方式展平返回值

bir*_*n04 0 powershell

假设我想从文件中读取一些字符串,并且对于每个字符串我想将其拆分。最后,我想获得字符串数组的数组。我尝试这样做的方法如下:

$toArchive = "./folders.txt"
$folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
Run Code Online (Sandbox Code Playgroud)

Get-Content应该返回一个字符串数组,对于每个字符串,我希望得到另一个字符串数组。但我的却不folderList是这样Object[],好像它被压扁了。例如,如果我的输入文件如下所示:

Docs /home/keddad/Documents/
NotDocs /home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

我得到 4 个元素的数组:

Docs                                                                                                                                                                                                                                                                           
/home/keddad/Documents/                                                                                                                                                                                                                                                        
NotDocs                                                                                                                                                                                                                                                                        
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

更新:只是为了澄清一下,它绝对是 4 个字符串的数组:

PS /home/keddad/Documents/tbackup> $toArchive = "./folders.txt"
PS /home/keddad/Documents/tbackup> $folderList = Get-Content $toArchive | ForEach-Object { @($_.split(" ")) }
PS /home/keddad/Documents/tbackup> $folderList.count
4
PS /home/keddad/Documents/tbackup> $folderList
Docs
/home/keddad/Documents/
NotDocs
/home/keddad/NotDocuments/
Run Code Online (Sandbox Code Playgroud)

msa*_*ord 5

您缺少数组构造运算符,

(Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") }))
Run Code Online (Sandbox Code Playgroud)

哪个会渲染

> (Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") })).count
2
Run Code Online (Sandbox Code Playgroud)

我相信,您喜欢的结构,例如:

> (Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") }))[0]
Docs
/home/keddad/Documents/

> (Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") }))[0][0]
Docs

> (Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") }))[0][1]
/home/keddad/Documents/
Run Code Online (Sandbox Code Playgroud)

或者整体可视化为 JSON:

> (Get-Content .\folders.txt | ForEach-Object ({ ,$_.split(" ") })) | ConvertTo-Json

[
    {
        "value":  [
                      "Docs",
                      "/home/keddad/Documents/"
                  ],
        "Count":  2
    },
    {
        "value":  [
                      "NotDocs",
                      "/home/keddad/NotDocuments/"
                  ],
        "Count":  2
    }
]
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

230 次

最近记录:

4 年,10 月 前