我只是想构建一个小脚本,它显示文件夹内的所有文件(递归),大于x MB。它以某种方式显示了该文件夹中的所有文件。 我的剧本在这里,有人能找到错误吗?
Param(
[string]$targetfolder
[string]$sizeinmb
)
function getfilesbigger
{
$colItems = (get-childitem "$targetfolder" -recurse | where {$_.length -gt $sizeinmbMB } | tee-object -variable allfiles | measure-object -property length -sum)
$allfiles | foreach-object {write-host $_.FullName ("{0:N2}" -f ($_.Length / 1MB)) "MB" -ForegroundColor "green" }
write-host "Collected all files bigger than $sizeinmb MB from folder $targetfolder " -foregroundcolor "darkgreen"
"Number of files: "+ $colItems.count + [Environment]::NewLine + "Size of all files "+"{0:N2}" -f ($colItems.sum / 1MB) + " MB"
}
getfilesbigger
答案 0 :(得分:2)
where {$_.length -gt $sizeinmbMB}
$sizeinmbMB
是$null
- 尚未设置。我认为你试图将1
传递给函数,然后将MB
附加到它的末尾,但字符串连接不会这样。
将实际大小传递给函数(不要将其设为“脚本”,将其作为可重用的函数,将其放在某处以备将来使用,如您自己的模块),作为当你调用它时,整数(如果使用1MB
,它将自动展开)。
function Get-FilesBigger {
[cmdletbinding()]
Param(
[ValidateScript({test-path -path $_ -pathtype container})]
[string]$Path,
[int]$MinFileSize
)
$colItems = get-childitem -path $Path -recurse | where-object {$_.length -gt $MinFileSize } | tee-object -variable allfiles | measure-object -property length -sum;
$allfiles | foreach-object {write-Verbose $($_.FullName + ("{0:N2}" -f ($_.Length / 1MB)) + "MB") };
"Collected all files bigger than " + $MinFileSize/1MB + "MB from folder $Path ";
"Number of files: "+ $colItems.count + [Environment]::NewLine + "Size of all files "+"{0:N2}" -f ($colItems.sum / 1MB) + " MB" ;
}
Get-FilesBigger -Path YOURPATH -MinFileSize 1MB -Verbose;
答案 1 :(得分:1)
你的$ sizeinmbMB应该是$ sizeinmb * 1MB