1)如何使用cmdlet get-member创建文件属性列表,然后按上次写入时间对其进行排序?
2)查找具有不同扩展名的文件的总大小(例如,所有* .html文件的总大小)
我认为第一个任务的解决方案(第二个任务没问题)应该是这样的(但它不起作用)
$a=get-childitem . -filter *.html
$n=$a.Length
do{
$isnotsorted=0
for($i=0;$i -lt ($n-1); $i++) {
if ((get-member $a[$i]).LastWriteTime -lt (get-member $a[$i]).LastWRiteTime){
$a[$i],$a[$i+1]=`
$a[$i+1],$a[$i]
$isnotsorted=$i+1
}
}
$n=$isnotsorted
}
until ($n -eq 0)
$a
答案 0 :(得分:5)
您无需使用Get-Member来执行此操作。您可以使用Sort-Object
和Select-Object
:
dir C:\ -Force | ? {!$_.PsIsContainer} | Sort LastWriteTime | Select FullName, Attributes
您可以使用Group-Object
和Measure-Object
来执行此操作。
((dir D:\Software -Force -Filter *.html | Group Extension).Group | Measure-Object -Sum Length).Sum / 1MB
我不确定您为什么不想使用Sort-Object -Property LastWriteTime
,但以下是修复冒泡排序代码的方法。请记住,Get-Member
不是用于访问属性值的正确cmdlet。
$a = get-childitem -filter *.html
$n = $a.Length
do {
$isnotsorted = 0
for($i = 0; $i -lt ($n-1); $i++) {
if ( ($a[$i]).LastWriteTime -lt ($a[$i + 1]).LastWRiteTime ) {
$a[$i] , $a[$i+1] = $a[$i+1] , $a[$i]
$isnotsorted = $i + 1
}
}
$n = $isnotsorted
} until ($n -eq 0)
$a
此处需要注意的另一点是,此算法的性能比仅使用Sort-Object
要糟糕得多。我的音乐文件夹有1355个文件,上面的完成时间为83秒。使用Sort-Object
在1.7秒内完成。
Measure-Command {
get-childitem D:\shares\Music -rec -filter *.m4a | Sort-Object LastWriteTime
}
答案 1 :(得分:2)
您不需要Get-Member
来显示文件的属性。只需使用Get-ChildItem
获取目录的内容,然后将其传递给Sort-Object
:
Get-ChildItem -Path $path | Sort-Object -Property 'LastWriteTime'
您可以将-Recurse
参数添加到Get-ChildItem
以列出子目录,并将-Force
添加到具有Hidden
属性的列表文件中。如果要显示除文件和目录的标准格式显示的属性之外的属性,则可以将所有这些管道传输到Format-*
cmdlet:
Get-ChildItem -Path $path `
| Sort-Object -Property 'LastWriteTime' `
| Format-Table -Property @('Attributes', 'FullName', 'CreationTime')
Get-Member
可用于确定文件或目录对象上存在哪些属性。
您可以将Measure-Object
与-Sum
开关一起使用,以添加文件集合的Length
属性:
$htmlFiles = Get-ChildItem -Path $path -Filter '*.html';
$measurement = $htmlFiles | Measure-Object -Property 'Length' -Sum;
$totalHtmlSize = $measurement.Sum;
要生成每种文件类型总大小的表,您可以执行以下操作:
Get-ChildItem -Path $path `
| Where-Object { $_ -is [IO.FileInfo]; } `
| Group-Object -Property 'Extension' `
| Select-Object `
@{ Name = 'Extension'; Expression = 'Name' }, `
@{ Name = 'TotalSize'; Expression = { `
($_.Group | Measure-Object -Property 'Length' -Sum).Sum } `
} `
| Sort-Object -Property 'Extension';
检索$path
的内容,将其过滤为仅包含文件,按Extension
属性对文件进行分组,将每个组投影到具有扩展属性的对象中,并将属性用于总文件大小,然后按扩展名对结果进行排序。