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