需要帮助找到文件和大小

时间:2018-01-29 10:50:14

标签: powershell filesystems

我在powershell中编写了一个脚本来查找共享驱动器中的文件,该文件从.txt文件中获取文件的名称。脚本如下。

$Files= Get-Content lock.txt
foreach ($File in $Files) {
    get-childitem -path Z:\lonmgb003_2 -Name $File -Recurse
}

有人可以帮我识别文件大小和路径。提前致谢。

2 个答案:

答案 0 :(得分:1)

-Name参数是一个开关 - 它不带参数 - 它会导致Get-ChildItem仅输出文件名而不输出任何其他内容。而$File参数则绑定到-Filter参数。

删除-Name参数,然后使用Select-Object cmdlet仅选择路径和大小。

由于您已经拥有数组中的所有文件名,因此您也可以使用-Include参数一次性检索它们:

Get-ChildItem -Path Z:\lonmgb003_2 -Include $Files -Recurse |Select FullName,Length

答案 1 :(得分:0)

您需要文件的LengthFullName属性。你可以做这样的事情。

$array= @() 
$Files= Get-Content lock.txt
foreach ($File in $Files)
{
        get-childitem -path Z:\lonmgb003_2 -Recurse | ?{$_.Name -like $File}
        $obj = New-Object PSObject  
        $Size = [Math]::Round((Get-ChildItem -Recurse $_.FullName | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB, 2) 
        $obj | Add-Member -MemberType NoteProperty -Name "Path" $_.FullName 
        $obj | Add-Member -MemberType NoteProperty -Name "SizeinMB" $Size 
        $array +=$obj 
 } 

$array | select Path, SizeinMB

我所做的是创建一个自定义PS对象,该对象将存储所有文件的FullName(precisely path)Size。使用-Name属性没有帮助,因为它只会将您的文件名作为string而不是文件名(您可以使用其属性)返回。因此,where-Object匹配文本文件中的文件名。操作完成后,所需的输出存储在名为$array的数组中。