[英]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.