我必须列出来自不同位置的一些字符串的文件,但在输出中我需要逐行路径。如果在第一个位置是多个文件,但是如果只有一个文件而在其他位置的文件比一行中的所有路径都多,那么一切都没关系。
示例:
$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
我做错了什么?
答案 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