关于PowerShell中(Get-ChildItem).Length的行为疑问:单文件目录下返回文件大小,是否有简便替代方案?
解决PowerShell中获取目录项数量的小技巧
嘿,这个问题我当初刚用PowerShell的时候也踩过坑!确实,当目录里只有一个文件时,(Get-ChildItem).Length返回的是文件本身的大小,而不是我们想要的项数——这是因为PowerShell的统一对象模型在搞事情:
- 当
Get-ChildItem返回多个结果时,它会自动包装成数组,此时.Length就是数组的元素个数(也就是项数); - 但如果只有一个结果,它直接返回单个
FileInfo或DirectoryInfo对象,这时.Length调用的是文件的大小属性。
不用自己写函数,有几个简便的解决方法:
方法1:强制转为数组(最通用)
用@()把Get-ChildItem的结果强制包装成数组,不管结果是单个还是多个对象,.Length都会返回数组的元素数量:
@(Get-ChildItem).Length
方法2:使用Count属性(PSv3+推荐)
从PowerShell 3.0开始,引入了统一属性访问机制,即使是单个对象,也能直接访问Count属性返回1,多个对象时返回元素个数:
(Get-ChildItem).Count
如果你的PowerShell版本是v2或更早,这个方法不适用,还是用方法1或者方法3。
方法3:用Measure-Object统计
通过管道把结果传给Measure-Object,然后取它的Count属性,这个方法兼容性最好,所有PowerShell版本都能用:
(Get-ChildItem | Measure-Object).Count
这几种方法都能完美解决你的问题,不用额外写函数~
内容的提问来源于stack exchange,提问作者pasta64
相关产品推荐
相关产品推荐

