获取目录名称,文件夹名称和所有文件数

问题描述 投票:0回答:1

我正在尝试创建一个脚本来读取目录中的每个文件夹名称,每个文件夹中的zip文件数,然后读取每个zip中的文件数。需要将输出写入输出文件。

我想出以下内容:

 $ZipRoot = 'C:\Users\Main Folder'
 $ZipFiles = Get-ChildItem -Path $ZipRoot -Recurse -Filter '*.zip'
 $Shell = New-Object -ComObject Shell.Application
 $Results = foreach( $ZipFile in $ZipFiles ){
     $FileCount = $Shell.NameSpace($ZipFile.FullName).Items() |
            Measure-Object |
            Select-Object -ExpandProperty Count
    [pscustomobject]@{
      FullName = $ZipFile.FullName
      FileCount = $FileCount
      }
    }
 $Results |
 Export-Csv -Path 'C:\Users\mlkstq\Desktop\FFNS\ZipReport.csv' -NoTypeInformation

输出

            Fullname                                 Filecount
            C:\Users\Main Folder\Subfolder1\Zip1     3
            C:\Users\Main Folder\Subfolder2\Zip2     5

问题是我在putput文件中获取子文件夹名称时遇到麻烦。还希望对子文件夹名称进行子字符串化以获得有效名称。无论我尝试什么,它都会失败。

powershell powershell-2.0 powershell-3.0 powershell-4.0
1个回答
0
投票

如果我答对了,我会这样做:

$ZipRoot = 'C:\Users\Main Folder'
$Shell = New-Object -ComObject Shell.Application

$subFolderList = Get-ChildItem -Path $ZipRoot -Recurse -Directory
$Result = foreach ($subFolder in $subFolderList) {
    $zipFileList = Get-ChildItem -Path $subFolder.FullName -File -Filter *.zip
    foreach ($ZipFile in $zipFileList) {
        [PSCustomObject]@{
            subFolder     = $subFolder.FullName
            zipFilesCount = $zipFileList.Count
            zipFile       = $ZipFile.Name
            fileCount     = $Shell.NameSpace($zipFile.FullName).Items().Count
        }
    }
}
Format-Table -InputObject $Result -AutoSize -InputObject $Result
Export-Csv -InputObject $Result -Path 'C:\Users\mlkstq\Desktop\FFNS\ZipReport.csv' -NoTypeInformation

我认为对子文件夹的每一行重复每个子文件夹的zip文件的数量看起来并不好

© www.soinside.com 2019 - 2024. All rights reserved.