Powershell在foreach序列中获取外部变量

时间:2009-01-12 10:32:04

标签: powershell

    PS C:\Projects> 
    get-childitem  -recurse 
 |  where { $_.Extension -eq ".csproj" }
 | foreach { Get-Content $_.FullName 
          | foreach { $_.Length } }

这会打印csproj中每一行的行大小(非常无意义)。当我进一步潜水时,我怎么能输出一个外部变量(可以这么说)。因此,举个例子,让我们说我想让它打印文件名,所以我会得到:

Dog.csproj:10 Dog.csproj:50 Dog.csproj:4 Cat.csproj:100 Cat.csproj:440

我想我想做这样的事情,但这显然不起作用(是的,这个例子毫无意义)

  PS C:\Projects> 
        get-childitem  -recurse 
     |  STORE THIS IN $filename | where { $_.Extension -eq ".csproj" }
     | foreach { Get-Content $_.FullName 
              | foreach { $filename ":"  $_.Length } }

我玩tee-object和outputvariable,但我有点失落。如果一个powershell大师可以回答它会有所帮助,如果你可以推荐一本书或资源来解释语言语法基础而不是COM / WMI / VB等API猴子的东西......(这似乎是我遇到的大部分内容)它非常感谢。感谢

3 个答案:

答案 0 :(得分:4)

这是一种直截了当的方式:

`gci . -r "*.csproj" | % { $name = $_.name; gc $_.fullname |
         % { $name + ": " + $_.length }  }`

如果您还不知道缩写,那相当于:

`Get-ChildItem . -recurse "*.csproj" | 
      foreach { $name = $_.name; Get-Content $_.fullname | 
      foreach { $name + ": " + $_.length }  }`

至于书籍推荐,必须是Bruce Payette的书:http://www.amazon.com/Windows-PowerShell-Action-Bruce-Payette/dp/1932394907

麦克

答案 1 :(得分:0)

get-childitem -recurse -filter * .csproj |选择@ {n =“FileName”; e = {$ .FullName}},@ {n =“Lines”; e = {$(cat $ .FullName).count}}

它输出如下:

FileName Lines -------- ---------- D:\ Scripts \ test1.csproj 867 D:\ Scripts \ test2.csproj 1773

答案 2 :(得分:0)

怎么样:

dir -r -fo * .csproj |选择@ {n =“FileName”; e = {$ .FullName}},@ {n =“LineLong”; e = {cat $ .fullName | foreach {$ _.length}}}