代码之家  ›  专栏  ›  技术社区  ›  oymonk

如何创建包含文件元数据和文件内容的CSV?

  •  0
  • oymonk  · 技术社区  · 6 年前

    Scripting Guy's code ,我可以创建一个csv来显示与我的计算机上的文件关联的元数据:

    enter image description here

    我想添加一个额外的列到这个csv包含文件的全部内容。我找到了 Get-Content cmd 并且能够让它工作,但我不知道如何将它插入到代码中。

    我尝试过多种方法:

    if($objFolder.getDetailsOf($File, $a))
               {
                 $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  =
                       $($objFolder.getDetailsOf($File, $a))
                       & $($objFolder.get-content($File, $a)) }
                $FileMetaData | Add-Member $hash
                $hash.clear() 
               } #end if
    

    错误代码:哈希文本不完整。

    if($objFolder.getDetailsOf($File, $a))
               {
                 $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  =
                       $($objFolder.getDetailsOf($File, $a)) }
                $FileMetaData | Add-Member $hash
                $FileMetData | Get-Content($objFolder)
                $hash.clear() 
               } #end if
    

    错误代码:找不到接受参数“recurse”的位置参数

      Function Get-FileMetaData 
    {
    Param([string[]]$folder)
     foreach($sFolder in $folder)
      {
       $a = 0
       $objShell = New-Object -ComObject Shell.Application
       $objFolder = $objShell.namespace($sFolder)
    
       foreach ($File in $objFolder.items())
        { 
         $FileMetaData = New-Object PSOBJECT
          for ($a ; $a  -le 266; $a++)
           { 
      if($objFolder.getDetailsOf($File, $a))
                   {
                     $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  =
                           $($objFolder.getDetailsOf($File, $a))}
                    $FileMetaData | Add-Member $hash
                    $hash.clear() 
                   } #end if
           } #end for 
         $a=0
         $FileMetaData
        } #end foreach $file
      } #end foreach $sfolder
    } #end Get-FileMetaData
    $picMetadata  = Get-FileMetaData -folder (Get-childitem C:\Olivia\ -Recurse -Directory).FullName
    
    
    $picMetadata |
    
    Select Name,'Date created','Folder name'|
    
    Export-CSV -Path C:\Olivia\metadata.csv -NoTypeInformation
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   ArcSet    6 年前

    好的,那么问题是把Get内容放在哪里

    你有三个循环在彼此内部发生。

    1. 最外向的是来自参数的文件夹数组中的每个文件夹。这一步创建一个shell com对象并获取有关该文件夹的信息。

    2. 最后一个也是最内部的获取通过266个选项循环的项目细节。然后将它们添加到PSObject。

    循环2是我们需要向PS对象添加一个新属性并添加内容的地方,这样每个项目只循环一次。我们还需要确保它不是一个文件夹,因为文件夹没有文件内容。

    这是添加到第二个循环中的函数的更改

    $FileMetaData | Add-Member -MemberType NoteProperty -Name Content -Value $(
        If($File.IsFolder -eq $false){
            Get-Content $File.Path
        }else{
            $null
        }
    )
    

    这是函数的翻版

    Function Get-FileMetaData{
    Param([string[]]$folder)
    foreach($sFolder in $folder){
        $a = 0
        $objShell = New-Object -ComObject Shell.Application
        $objFolder = $objShell.namespace($sFolder)
        foreach ($File in $objFolder.items()){
            $FileMetaData = New-Object PSOBJECT
            for ($a ; $a  -le 266; $a++)
            { 
                if($objFolder.getDetailsOf($File, $a))
                {
                $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  =
                        $($objFolder.getDetailsOf($File, $a)) }
                $FileMetaData | Add-Member $hash
                $hash.clear() 
                }
            }
            $a=0
            $FileMetaData | Add-Member -MemberType NoteProperty -Name Content -Value $(
                If($File.IsFolder -eq $false){
                    Get-Content $File.Path
                }else{
                    $null
                }
            )
             $FileMetaData
            }
        }
    }
    
    推荐文章