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猴子的东西......(这似乎是我遇到的大部分内容)它非常感谢。感谢
答案 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}}}