生成2个不同的列表在一个foreach循环与powershell
问题描述:
我在foreach部分stucked。我找不到任何解决方案在一个foreach循环中生成2个不同的列表。我使用了2 foreach但它并没有帮助。分享了我的愿望输出。生成2个不同的列表在一个foreach循环与powershell
我的代码:
$InStuff = @'
a
b
c
'@.Split("`n").Trim()
$InStuff2 = @'
1
2
3
'@.Split("`n").Trim()
$SPart_1 = 'application="'
$SPart_2 = ' path='
$SPart_3 = ' name='
$SPart_4 = ' application'
foreach ($IS_Item in $InStuff) {
foreach ($IS2_Item in $InStuff2) {
$UName = $IS_Item
$UName2 = $IS2_Item
$Sentence = -join (
$SPart_1, $UName,
$SPart_2, $UName2,
$SPart_3, $UName2,
$SPart_4
)
''
$Sentence
}
}
故障输出:
application="a path=1 name=1 application
application="a path=2 name=2 application
application="a path=3 name=3 application
application="b path=1 name=1 application
application="b path=2 name=2 application
application="b path=3 name=3 application
application="c path=1 name=1 application
application="c path=2 name=2 application
application="c path=3 name=3 application
我的愿望输出:
application="a path=1 name=1 application
application="b path=2 name=2 application
application="c path=3 name=3 application
谢谢
答
使用for
循环:
$InStuff = @'
a
b
c
'@.Split("`n").Trim()
$InStuff2 = @'
1
2
3
'@.Split("`n").Trim()
$SPart_1 = 'application="'
$SPart_2 = ' path='
$SPart_3 = ' name='
$SPart_4 = ' application'
for ($i = 0; $i -lt $InStuff.count; $i++) {
$Sentence = -join (
$SPart_1, $InStuff[$i],
$SPart_2, $InStuff2[$i],
$SPart_3, $InStuff2[$i],
$SPart_4
), ''
$Sentence
}
如果输入数组的长度不一样,这可能会出错,所以它不是那么安全。或许使用散列或自定义对象将是一个更好的主意:
$arr = @()
$arr += new-object PSCustomObject -property @{application='a';path=1;name=1}
$arr += new-object PSCustomObject -property @{application='b';path=2;name=2}
$arr += new-object PSCustomObject -property @{application='c';path=3;name=3}
$arr | % { 'application="{0} path={1} name={2}' -f $_.application, $_.path, $_.name }
答
@ arco444是正确的,不管是什么,你将有问题,如果你的列表是不同的长度。您应该重新考虑如何收集和格式化数据。这是一种替代方法:
$InStuff = "a","b","c"
$InStuff2 = 1,2,3
$listCount = $InStuff.Count
$x = 0
do {
$strOut = "application= `"path = {0} name = {1} application`"" -f $InStuff[$x], $InStuff2[$x]
$strOut
$x++
}
while ($x -lt $listCount)
不知道你想要什么,在那里流浪"
,我添加了一个封闭的输出:
application= "path = a name = 1 application"
application= "path = b name = 2 application"
application= "path = c name = 3 application"
如果你打算使用此输出通过PowerShell的进一步处理,就像把它与Export-Csv
一个CSV文件,那么你应该放弃application
文本并创建一个对象,而不是:
$InStuff = "a","b","c"
$InStuff2 = 1,2,3
$listCount = $InStuff.Count
$x = 0
do {
[pscustomobject]@{
path = $InStuff[$x]
name = $InStuff2[$x]
}
$x++
}
while ($x -lt $listCount)
虽然这是你所要求的不完全是,它是我的经验,在这个格式的数据是有用得多:
path name
---- ----
a 1
b 2
c 3
您可以添加行
[pscustomobject]@{
path = $InStuff[$x]
name = $InStuff2[$x]
}
的附加文本(如果这是一个必须),做这样的事情:
[pscustomobject]@{
type = "application"
path = $InStuff[$x]
name = $InStuff2[$x]
}
,这将增加一个列字application
ty brendan;)欣赏它 –