我在PowerShell中使用以下代码来获取文件名以及一个文件夹中的数字行。
Get-ChildItem -re -in "*.tsv" |
Foreach-Object {
$fileStats = Get-Content $_.baseName | Measure-Object -line
$linesInFile = $fileStats.Lines
Write-Host "$_=$linesInFile"
}
但是,即时消息获取具有路径的文件名。我尝试将.Fullname更改为。基本名称即时错误。
任何想法??我们还可以在文本文件中获得输出吗?
您不想在file stats命令中使用基本名称,因为它需要文件的完整路径。
对于输出,当您需要直接使用write-host在文本字符串中显示子属性时,将需要通过将其包裹在neex中来手动扩展它 $()
即:除非将默认变量包装$_.name
在中$()
,以便$($_.name)
在Write-Host
命令中使用它时将其写入,否则它将始终打印出文件的完整路径。
Get-ChildItem -re -in "*.tsv" |
Foreach-Object {
$fileStats = Get-Content $_ | Measure-Object -line
$linesInFile = $fileStats.Lines
Write-Host "$($_.name)=$linesInFile"
}
但是,更好的方法是仅用于Select-Object
创建您想要的信息的哈希表,并For-Each
完全放弃循环。
可以使用以下简单的一个衬套来完成:
Get-ChildItem -re -in "*.tsv" | Select-object -property name, @{n='Lines';e={$(Get-Content $_ | Measure-Object -line).Lines}}
您可以看到我们从的结果中进行选择GCI
,select-object
返回一个哈希表,选择该name
属性,然后创建一个名为“ Lines”的计算属性,该属性定义其名称和用于创建该属性的表达式。
为了更清楚一点,我在这里将其分成几行,但与上面的代码相同。
Get-ChildItem -re -in "*.tsv" |
Select-object -property name, @{
n='Lines';e={
$(Get-Content $_ | Measure-Object -line).Lines
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句