我在powershell中编写了一个脚本来查找共享驱动器中的文件,该文件从.txt文件中获取文件的名称。脚本如下。
$Files= Get-Content lock.txt
foreach ($File in $Files) {
get-childitem -path Z:\lonmgb003_2 -Name $File -Recurse
}
有人可以帮我识别文件大小和路径。提前致谢。
答案 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)
您需要文件的Length
和FullName
属性。你可以做这样的事情。
$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
的数组中。