簡體   English   中英

Powershell:目錄文件結構到 JSON

[英]Powershell: Directory file structure into JSON

您好,我是 PowerShell 的新手。 我有一個 4 級的文件路徑。

根目錄\目錄1\目錄2\目錄3\文件

文件結構始終保持不變。

這是我的代碼,問題是它重復相同的值

#Place Root Folder in desktop
$Fullpath = 'C:\Users\Glen Sale\Desktop\donor'
$rootDir = $Fullpath.Split('\')[4]

#Get Creationtime of matching root folder
$session = Get-ChildItem 'C:\Users\Glen Sale\Desktop' -Filter $rootDir



    $organfolder = Get-ChildItem 'C:\Users\Glen Sale\Desktop\donor' -Directory 
foreach ($dir in $organfolder){
    Get-ChildItem $dir.FullName -File 
    $biospyfolder = Get-ChildItem $dir.FullName -Directory
    foreach($dir2 in $biospyfolder){
        gci $dir2.fullname -File
        $sectionfolder = gci $biospyfolder.fullname -Directory
        foreach($dir3 in $sectionfolder){
           $tiffFiles= gci $dir3.fullname -File
        }
    }
}


function recurse {

    Get-ChildItem -LiteralPath $Fullpath   |
    ForEach-Object { 
        $Obj = [ordered]@{
             session_id = $session.CreationTime | Get-Date -f ("yyyyMMdd") 
             session_date = $session.CreationTime | Get-Date -f ("yyyy/MM/dd") 
                #$rootDir 
                organ=@{ 
                     organ_id= $organfolder.namer#[0]
                        biospy= @( 
                            @{biospy_id = $biospyfolder.name#[0]
                                section= @(
                                    @{section_id= $sectionfolder.name#[0]
                                      tiff_files = $tiffFiles.name#[0]  
                                    }
                                )
                        })
           }
        }
    } {
        $Obj
    }
}


recurse  | ConvertTo-Json -Depth 100 #| out-file ''

我得到的 output 正在重修。 結果:

[
    {
        "session_id":  "20210418",
        "session_date":  "2021/04/18",
        "organ":  {
                      "organ_id":  [
                                       "FBG01",
                                       "FBG02"
                                   ],
                      "biospy":  [
                                     {
                                         "biospy_id":  "FBG01.12.1",
                                         "section":  [
                                                         {
                                                             "section_id":  [
                                                                                "FBG01.12.1.1",
                                                                                "FBG01.12.1.2"
                                                                            ],
                                                             "tiff_files":  [
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d0.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d1.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d2.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d3.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d0.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d1.TIF"
                                                                            ]
                                                         }
                                                     ]
                                     }
                                 ]
                  }
    },
    {
        "session_id":  "20210418",
        "session_date":  "2021/04/18",
        "organ":  {
                      "organ_id":  [
                                       "FBG01",
                                       "FBG02"
                                   ],
                      "biospy":  [
                                     {
                                         "biospy_id":  "FBG01.12.1",
                                         "section":  [
                                                         {
                                                             "section_id":  [
                                                                                "FBG01.12.1.1",
                                                                                "FBG01.12.1.2"
                                                                            ],
                                                             "tiff_files":  [
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d0.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d1.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d2.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d3.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d0.TIF",
                                                                                "No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d1.TIF"
                                                                            ]
                                                         }
                                                     ]
                                     }
                                 ]
                  }
    }
]

這些是我想要的正確分類的結果

{
  "session_id": "20210409",
  "session_date": "2021/04/09",
  "organ": {
    "organ_id": "FBG01",
    "biopsy": [
      {
        "biopsy_id": "FBG01.12.1",
        "section": [
          {
            "section_id": "FBG01.12.1.1",
            "tiff_files": [
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f00d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f01d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f02d0.TIF"
            ]
          },
          {
            "section_id": "FBG01.12.1.2",
            "tiff_files": [
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f20d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f21d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f22d0.TIF"
            ]
          }
        ]
      },
      {
        "biopsy_id": "FBG01.18.1",
        "section": [
          {
            "section_id": "FBG01.18.1.1",
            "tiff_files": [
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f00d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f01d0.TIF",
              "FBG01 12 hr_Bottom Slide_R_p01_0_A01f02d0.TIF"
            ]
          },
          {
            "section_id": "FBG01.18.1.2",
            "tiff_files": [
              "FBG01 18 hr_Bottom Slide_R_p01_0_A01f20d0.TIF",
              "FBG01 18 hr_Bottom Slide_R_p01_0_A01f21d0.TIF",
              "FBG01 18 hr_Bottom Slide_R_p01_0_A01f22d0.TIF"
            ]
          }
        ]
      }
    ]
  }
}

如果您需要查看目錄的樣子

C:\USERS\GLEN SALE\DESKTOP\DONOR
+---FBG01
|   \---FBG01.12.1
|       +---FBG01.12.1.1
|       |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f02d3.TIF
|       |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d0.TIF
|       |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d1.TIF
|       |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d2.TIF
|       |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d3.TIF
|       |       
|       \---FBG01.12.1.2
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d0.TIF
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d1.TIF
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d2.TIF
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d3.TIF
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d0.TIF
|               No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d1.TIF
|               
\---FBG02
    \---FBG01.12.1
        +---FBG01.12.1.1
        |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f02d3.TIF
        |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d0.TIF
        |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d1.TIF
        |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d2.TIF
        |       No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f03d3.TIF
        |       
        \---FBG01.12.1.2
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d0.TIF
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d1.TIF
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d2.TIF
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f00d3.TIF
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d0.TIF
                No Sample 0.05 40X_Bottom Slide_R_p00_0_A01f01d1.TIF
            

它來自您編寫遞歸 function 的方式,因為Foreach-object具有特殊的語法。

看着:

1..3| foreach-object {$n=0}{$a=$n++}{$a}

給出:

3

第一個腳本塊是在循環之前執行一次啟動器,第二個是循環執行的次數與對象數量一樣多,第三個在結束時執行一次。

但是你只用了兩個

1..3| foreach-object {$a=$n++}{$a}

這使:

3
3
3

第一個腳本塊啟動器執行一次,循環{$obj}執行多次。

我使用 class 和嵌套循環找到了我的問題的解決方案

class section
{
    [System.String]$section_id = ''
    [System.String[]]$tiff_files = @()
}
class biopsy
{
    [System.String]$biopsy_id = ''
    [section[]]$section = @()
}
class organ
{
    [System.String]$organ_id = ''
    [biopsy[]]$biopsy = @()
}
class session
{
    [System.String]$session_id = ''
    [System.String]$session_date = ''
    [organ[]]$organ = @()
}

 

$session = [session]@{
    session_id = 'session_id'
    session_date = 'session_date'
}
foreach($o in Get-ChildItem -Directory -Path C:\Users\v-mtouri\Desktop\donor)
{
    $organ = [organ]@{organ_id = $o.Name}
    $session.organ += $organ
    foreach ($b in Get-ChildItem -Directory -Path $o.FullName)
    {
        $biopsy = [biopsy]@{biopsy_id = $b.Name}
        $organ.biopsy += $biopsy
        foreach ($s in Get-ChildItem -Directory -Path $b.FullName)
        {
            $section = [section]@{
                section_id = $s.Name
                tiff_files = Get-ChildItem -File -Path $s.FullName | Select-Object -ExpandProperty Name
            }
            $biopsy.section += $section
        }
    }
}

 

$session | ConvertTo-Json -Depth 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM