首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PS2中定制一个清单

在PS2中定制一个清单
EN

Stack Overflow用户
提问于 2015-07-16 12:08:47
回答 1查看 43关注 0票数 0

请考虑以下目录树:

代码语言:javascript
复制
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

有3种可能的情况:

  1. A (sub)dir为空;root/dir3/dir31root/dir4
  2. 一个(子)dir包含(仅) L0x文件,其中x是一个数字;root/dir1/dir11root/dir2
  3. 一个(子)dir有文件,但没有L0x-kind的文件。

所需的输出是一个包含3列的自定义目录:

  1. 丝状
  2. 文件大小
  3. 左撇子(见下文)

其逻辑如下:

  1. 如果(sub)dir为空,请不要列出该dir。
  2. 如果(子)dir包含(仅) L0x文件,则只列出第一个文件(root/dir1/dir11/x.L01),但要计算所有L01的文件数和文件总数。
  3. 如果(子)dir有其他文件,请列出dir,但要计算所有文件的数量和总文件大小。

因此,示例输出将是:

代码语言:javascript
复制
path                      size     count
----------------------------------------
root/dir1/dir11/x.L01      22kb        2
root/dir1/dir12/dir122     11kb        3
root/dir2/a.L01           350kb        3

我刚刚开始使用powershell,我想出了以下几点,这不是很多,但是(a)我的方向正确吗?以及(b)如何从这里着手?

代码语言:javascript
复制
Get-ChildItem "C:\root" -Recurse |
Foreach-Object {
    If ($_.PSIsContainer) {
        Get-ChildItem $_.fullname |
        Foreach-Object {
            Write-Host $_.fullname
        }
    }
}

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 13:44:21

这可以随着你的需求的变化而变化。这将作为一个自定义对象创建所需的输出,您可以根据需要操作和导出该对象。

代码语言:javascript
复制
$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格式的。如果需要的话我们可以确认。

样本输出

代码语言:javascript
复制
Path                                            Size     Count
----                                            ----     -----
C:\temp\win64                                   1,092 KB     2
C:\temp\Empy\Stuff\New Text Document - Copy.L01 0 KB         2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31453748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档