逐行字符串

时间:2018-04-12 09:29:02

标签: string powershell get-childitem 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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您的第一个语句只生成一个结果,则变量$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

答案 1 :(得分:0)

这很好用,但我不知道为什么我的问题中的代码上面没有用。

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