如何检查项目大小并在Powershell中将其移动到某个阈值以上时将其移动

时间:2018-09-07 10:38:59

标签: powershell

我目前正在研究Powershell脚本,该脚本应该执行以下操作: 检查文件夹中的所有项目,如果有任何超过一定大小(例如10MB)的项目,请创建一个文件夹(名为“ toobig”)并将其移到那里。

到目前为止,这是我的脚本:

function delbig {

param (
[parameter (Mandatory=$true)]
 $p
)


$a= Get-ChildItem $p | Where-Object {$_.Length -gt 10000000} | Measure- Object
$a.count


if ($a -gt 0){

    mkdir "$p\tooBig"

}

"$([int]$a)"

}
delbig

我已经弄清楚了如何移动项目以及如何创建文件夹,但是决定是否触发操作的if条件给了我以下错误:

Cannot compare "Microsoft.PowerShell.Commands.GenericMeasureInfo" because it is not IComparable.
At C:\Powertest\movbig.ps1:14 char:1
+ if ($a -gt 0){
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NotIcomparable

Cannot convert the "Microsoft.PowerShell.Commands.GenericMeasureInfo" value of type "Microsoft.PowerShell.Commands.GenericMeasureInfo" to type "System.Int32".
At C:\Powertest\movbig.ps1:20 char:4
+ "$([int]$a)"
+    ~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : ConvertToFinalInvalidCastException

因此,$ a中的值应该是int格式吗?我的if条件应该看值是否大于0(我也尝试过使用“ 0”)。

任何帮助将不胜感激!

关于Gerfi,

3 个答案:

答案 0 :(得分:4)

$aGenericMeasureInfo类型的实例,不能与零(一个int)进行比较。使用Count的{​​{1}}属性与零进行比较:

$a

此外,我注意到if ($a.Count -gt 0){ mkdir "$p\tooBig" } 中有一个空格需要删除。我猜这只是帖子中的错字。

答案 1 :(得分:2)

这应该可以完成工作:

function Move-BigFiles {
    param([parameter(Mandatory=$true)]$Path)

    $tooBigFiles = Get-ChildItem $Path | Where-Object {$_.Length -gt 10MB}
    if ($tooBigFiles) {
        $dest = mkdir "$Path\TooBig" -Force
        $tooBigFiles | Move-Item -Destination $dest
    }
}

PowerShell条件可以使用“真实”值。任何非空集合都将解释为$true

您的脚本的问题是类型不匹配。由于测量对象的调用,$a是类型Microsoft.PowerShell.Commands.GenericMeasureInfo的对象。不能与int的值进行比较。

答案 2 :(得分:0)

非常感谢你们,在您的帮助下,我现在有了脚本来执行我想做的事情:

function delbig {

param (
[parameter (Mandatory=$true)]
 $p
)


$toobigfiles= Get-ChildItem $p | Where-Object {$_.Length -gt 10000000} | Measure-Object
$toobigfiles.count


if ($toobigfiles.Count -gt "0"){

    mkdir "$p\tooBig"
}


$toobigfiles= Get-ChildItem $p | Where-Object {$_.Length -gt 10000000}

if ($toobigfiles.Count -gt "0"){

    $toobigfiles | Move-Item -Destination "$p\tooBig"
}

#"$toobigfiles"


}
delbig

这是我第一次自己编写脚本,我很高兴:) (大约一周前开始学习Powershell,我一生中从未写过任何代码)