逐行串

String line by line

我必须使用来自不同位置的一些字符串列出文件,但在输出中我需要逐行路径。如果第一个位置的文件不止一个,那没关系,但如果只有一个文件,而在其他位置的文件比所有路径都在一行中的文件更多。

示例:

$files = (Get-ChildItem "C:\temp" | Select-String "test" | group Path).Name

输出:

C:\temp\cca.msi
C:\temp\dfgfg.txt
C:\temp\dghghfgh.txt

添加第二个位置:

$files += (Get-ChildItem "C:\temp2" | Select-String "test" | group Path).Name

输出:

C:\temp\cca.msi
C:\temp\dfgfg.txt
C:\temp\dghghfgh.txt
C:\temp2\file3.txt
C:\temp2\file4.txt

以上正确。

下面是我的错误:

$files = (Get-ChildItem "C:\temp" | Select-String "test" | group Path).Name

输出:

C:\temp\cca.msi

添加更多路径:

$files += (Get-ChildItem "C:\temp2" | Select-String "test" | group Path).Name

一行输出:

C:\temp\cca.msiC:\temp2\file3.txtC:\temp2\file4.txt

我做错了什么?

效果很好,但我不知道为什么我的问题中的上述代码不起作用。

$files=(Get-ChildItem "C:\temp","C:\temp2"  | Select-string "test"| group path).name

如果您的第一个语句只产生一个结果,则变量 $files 包含一个字符串,而不是一个数组。您可以通过强制执行数组结果来解决这个问题,例如通过 array subexpression operator (@()):

$files = @((Get-ChildItem "C:\temp" | Select-String "test" | group Path).Name)

或者通过将变量定义为数组:

[array]$files = (Get-ChildItem "C:\temp" | Select-String "test" | group Path).Name