我目前正在研究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,
答案 0 :(得分:4)
$a
是GenericMeasureInfo
类型的实例,不能与零(一个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,我一生中从未写过任何代码)