请考虑以下目录树:
root
dir1
dir11
x.L01 12kb
x.L02 10kb
dir12
dir122
a.jpg 5kb
b.xls 3kb
c.bmp 3kb
dir2
a.L01 100kb
a.L02 200kb
a.L03 50kb
dir3
dir31
dir4
有三种可能的情况:
root/dir3/dir31
和root/dir4
L0x
个文件,其中x
是一个数字; root/dir1/dir11
和root/dir2
L0x
种类所需的输出是一个包含3列的自定义目录:
逻辑如下:
L0x
个文件,则只列出第一个(root/dir1/dir11/x.L01
),但计算所有{的文件大小和总文件大小{1}}Š所以示例输出将是:
L01
我刚刚开始使用PowerShell,并提出了以下内容,但这不是很多,但是(a)我是否朝着正确的方向前进? (b)如何从这里出发?
path size count
----------------------------------------
root/dir1/dir11/x.L01 22kb 2
root/dir1/dir12/dir122 11kb 3
root/dir2/a.L01 350kb 3
非常感谢任何帮助!
答案 0 :(得分:1)
这可以随着您的需求变化而发展。这将创建所需的输出作为自定义对象,您可以根据需要进行操作和导出。
$rootPath = "c:\temp"
Get-ChildItem $rootPath -Recurse |
Where-Object {$_.PSIsContainer} |
Where-Object {(Get-ChildItem $_.FullName | Where-Object {!$_.PSIsContainer}| Measure-Object | Select-Object -ExpandProperty Count) -gt 0} |
ForEach-Object{
$files = Get-ChildItem $_.FullName
$props = @{
Path = $_.FullName
Size = "{0:N0} KB" -f (($files | Where-Object {!$_.PSIsContainer} | Measure-Object -Sum Length | Select-Object -ExpandProperty Sum) / 1024)
Count = $files | Measure-Object | Select-Object -ExpandProperty Count
}
If($files.Extension -match "L\d\d"){
# These are special files and we are assuming they are alone in the directory
# Change the path
$props.Path = $files | Where-Object {!$_.PSIsContainer} | Select-Object -First 1 | Select-Object -ExpandProperty FullName
}
New-Object -TypeName PSCustomObject -Property $props
} | Select Path,Size,Count
以递归方式获取$rootPath
的所有文件夹和文件。根据其直接内容过滤掉所有文件和空文件夹。然后使用所有请求的详细信息构建自定义对象。如果事实证明存在L0X文件,则使用找到的第一个文件更新路径。
目前我假设所有文件都是L0X格式。如果需要,我们可以确认。
示例输出
Path Size Count
---- ---- -----
C:\temp\win64 1,092 KB 2
C:\temp\Empy\Stuff\New Text Document - Copy.L01 0 KB 2