Foreach - 为foreach循环添加表示法,我是否需要嵌套的foreach

时间:2015-08-25 19:26:06

标签: git powershell foreach

我的脚本需要一些帮助;我已经完成了第一部分,但第二部分我并不完全确定是否需要第二部分。 首先,脚本从分支输出文件和哈希值。在哈希旁边,我设法添加了一个符号,我可以在以后更改输出" hash"我要提出的第二部分" file"在输出的每个文件旁边,下面我已经包括输出应该是什么,就像那样;但我似乎无法获得" file"每个文件名旁边的符号。

$GitList = git log master..branch2 --pretty=format:'%H' --reverse


foreach ($hash in $GitList) {
    "$hash hash"
    $files = git show $hash --pretty="format:" --name-only
    $files
}


#-------------------------------output should be like below

37b970b35681728db2faa4135681728d hash
branch2/ScriptPart1.ps1 file
37b970b371a7805a657030f687135681728d hash
branch2/ScriptPart2.ps1 file
branch2/ScriptPart3.ps1 file
37b970b30a137b970b381e5d5135681728d hash
branch2/ScriptPart2.ps1 file
321b2feb5d37b970b32d47f4135681728d hash

提前致谢

2 个答案:

答案 0 :(得分:2)

我只会做一个快速而肮脏的foreach-object并完成它......有点像:

$files | Foreach-Object { "{0} file" -f $_ }

答案 1 :(得分:0)

您的主要问题可能是,该行的返回值:

git show $hash --pretty="format:" --name-only

由PowerShell作为字符串数组处理,其中包含两个项目,其中第一个项目包含空字符串。

直接处理第二项是实现您想要做的事情的方法:

$GitList = git log master --pretty=format:'%H' --reverse

foreach ($hash in $GitList) {
    "$hash hash"
    (git show $hash --pretty="format:" --name-only)[1] + ' file'
}

顺便说一句:根据您的情况,您可以考虑使用PSObjects作为输出。特别是如果您计划通过PowerShell进一步处理脚本的输出:

foreach ($hash in $GitList) {
    $file = (git show $hash --pretty="format:" --name-only)[1]
    New-Object -Type psobject -Property @{'Hash'= $hash; 'File' = $file}
}