@ -6,6 +6,7 @@
[switch] $Sub
[switch] $Sub
)
)
Import-Module -Name ( $PSScriptRoot + " \PathChar.psd1 " )
Import-Module -Name ( $PSScriptRoot + " \PathChar.psd1 " )
Import-Module -Name ( $PSScriptRoot + " \NameRegex.psd1 " )
Edit-PathChar $Path
Edit-PathChar $Path
#$TargetName = "俺だけ入れる隠しダンジョン〜こっそり鍛えて世界最強〜";
#$TargetName = "俺だけ入れる隠しダンジョン〜こっそり鍛えて世界最強〜";
$TargetName = " "
$TargetName = " "
@ -44,8 +45,6 @@ $WorkData
$Seasons_TC = " " , " 第一季 " , " 第二季 " , " 第三季 " , " 第四季 " , " 第五季 "
$Seasons_TC = " " , " 第一季 " , " 第二季 " , " 第三季 " , " 第四季 " , " 第五季 "
$Year = @ ( $ ( $JsonPath -replace '.*\\((?<Y>\d{4})?(?<M>\d{2})?).*$' , '${Y}' ) , $ ( get-date -Format 'yyyy' ) ) | ? { -not ( [string] :: IsNullOrEmpty ( $_ ) ) } | Select -First 1
$Year = @ ( $ ( $JsonPath -replace '.*\\((?<Y>\d{4})?(?<M>\d{2})?).*$' , '${Y}' ) , $ ( get-date -Format 'yyyy' ) ) | ? { -not ( [string] :: IsNullOrEmpty ( $_ ) ) } | Select -First 1
#$($JsonPath -replace '.*\\((?<Y>\d{4})?(?<M>\d{2})?).*$', '${Y}');
# 取得目標資料夾是否存在,不存在建立資料夾,並取得資料夾物件
# 取得目標資料夾是否存在,不存在建立資料夾,並取得資料夾物件
$LinkPath = " {2}\{0}\{1} " -f $WorkData . DestinName , $Seasons_TC [ $WorkData . Season ] , $Index
$LinkPath = " {2}\{0}\{1} " -f $WorkData . DestinName , $Seasons_TC [ $WorkData . Season ] , $Index
$LinkDir = $ ( if ( -not ( Test-Path -Path " $ LinkPath* " ) ) {
$LinkDir = $ ( if ( -not ( Test-Path -Path " $ LinkPath* " ) ) {
@ -66,61 +65,27 @@ function Get-StandName {
} else {
} else {
Get-Item -Path $ ( Edit-PathChar $FileObj )
Get-Item -Path $ ( Edit-PathChar $FileObj )
} )
} )
# 因應檔名不同而設定多組正規方式
# 因應檔名不同而設定多組正規方式
$Result = @ ( $ (
$EpisodeRegex = @ (
#$($TestName[-1] -match "\[([^\]]*)\]\[(\d{1,2})\]")
" S\d{2}[\s\-]+E?(?<Episode>\d{2}) "
#$($File.Name -match "[\[\s]([^\]]*?)(?:[\]\[\-\s]+)(\d{1,2})[\]\s]")
" [\[\b\s](?<Episode>\d{2})[\s_]?(?:[vV]\d|END|FIN)[\]\b\s] "
#$($File.Name -match "[\[\s](?<Name>\b[^\]]*\b)(?:[\]\[\-\s]+)(?<Episode>\d{1,2})(?:[vV]\d|FIN|END)?[\]\s]")
" \[(?<Episode>\d{1,2})\w{2}\] "
$ ( $ ( $File . Name -replace " \[(DVD|HDTV|BD)rip\] " , '' ) -match " [\[\s](?<Name>\b[^\]]*\b)(?:[\]\[\-\s]+)(?<Episode>\d{1,2})(?:_?[vV]\d|FIN|END)?[\]\s] " )
" \[(?<Episode>\d{1,2})\] "
#$($TestName[-1] -match "[\[\s](?<Name>[^\]]*?)(?:[\]\[\-\s]+)(?<Episode>\d{1,2})(?:[vV]\d)?[\]\s]")
)
) | % { if ( $_ ) { $Matches } } )
$NameRegex = @ (
" [\[\b\s](?<Name>[^\[\]]*)[\]\b\s] $ "
)
# 檔名分析測試用
$Result = $File . Name | % { Get-NameRegex $_ -Regex $EpisodeRegex } | % { $ ( Get-NameRegex $_ [ " L " ] -Regex $NameRegex -Exclude " (BD|DVD|HDTV)RIP " -End ) + $_ }
# $Pathes = @(
# "L:\Anime\200910 聖剣の刀鍛冶(聖劍鍛造師)\[DMG][The Sacred Blacksmith][01-12 END][848x480][BIG5]\[DMG][The Sacred Blacksmith][04V2][848x480][BIG5].rmvb"
# "L:\Anime\201104 星空へ架かる橋(架向星空之橋)\[AngelSub][Hoshizora e Kakaru Hashi][BDRip][Vol.01][1920x1080][TW_BIG5][x264_FLAC]\[AngelSub][Hoshizora e Kakaru Hashi][BDRip][01][1920x1080][BIG5][x264_FLAC].mkv"
# "H:\Anime\201901 盾の勇者の成り上がり\[LKSUB][Tate no Yuusha no Nariagari][01-25][GB][720P][MP4]\[LKSUB][Tate no Yuusha no Nariagari][01][GB][720P].mp4"
# "L:\Anime\202004 ストライク・ザ・ブラッド OVA IV\[Suzu-Kaze][Strike_the_Blood_IV_OVA][01-12FIN][BDRip_1080P][HEVC_YUV420P10]\[Suzu-Kaze] Strike the Blood IV 12FIN [BDRip 1920x1080 HEVC YUV420P10 FLAC].mkv"
# "L:\Anime\200910 アスラクライン II(機巧魔神)\[DMG][Asura Cryin2][01-13 END][848x480][BIG5][RMVB]\[DMG][Asura Cryin 2][01][848x480][Big5].rmvb"
# "H:\Data\Downloads\異世界食堂\[Lilith-Raws] Isekai Shokudou S02 - 06 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4"
# )
# $TestName = @($Pathes | % {$_.Split("\\")[-1]})
# $Result = @( $TestName | % { @(
#$($_ -match "\[([^\]]*)\]\[(\d{1,2})\]")
# $($($_ -replace "\[(DVD|HDTV|BD)rip\]", '') -match "[\[\s](?<Name>\b[^\]]*\b)(?:[\]\[\-\s]+)(?<Episode>\d{1,2})(?:[vV]\d|FIN|END)?[\]\s]")
# ) | % { if ($_) { $Matches }}})
# Write-Output $Result
# $Matches
# OLD Edition
#$File.Name -match "\[([^\]]*)\]\[(\d{1,2})\]" | Out-Null
#$Matches
#$newName = "{0} S{3:00}E{1}{2}" -f $Matches[1], $Matches[2], $File.Extension, $Season;
#$newName = "{0} S{3:00}E{1}{2}" -f $Result[1], $Result[2], $File.Extension, $WorkData.Season;
# 建立回傳資料物件,以方便後續資料處理。
# 建立回傳資料物件,以方便後續資料處理。
$OutputData = " " | Select newName , Season , Episode , newFullName ;
$OutputData = " " | Select newName , Season , Episode , newFullName ;
$OutputData . newName = $Result . Name ;
$OutputData . newName = $Result . Name ;
$OutputData . Season = $WorkData . Season ;
$OutputData . Season = $WorkData . Season ;
$OutputData . Episode = [int] $Result . Episode ;
$OutputData . Episode = [int] $Result . Episode ;
$OutputData . newFullName = " {0} S{3:00}E{1}{4}{2} " -f $Result . Name , $Result . Episode , $File . Extension , $WorkData . Season , $ ( if ( $Sub ) { " .default " } ) ;
$OutputData . newFullName = " {0} S{3:00}E{1}{4}{2} " -f $Result . Name , $Result . Episode , $File . Extension , $WorkData . Season , $ ( if ( $Sub ) { " .default " } ) ;
#$OutputData | ConvertTo-Json;
# Type 2,在輸出顯示上,此型態建立較傾向 Hash,而上面 select 建立的,較偏向 pscustomobject
#$OutputData2 = @{
# newName = $Result[1];
# Season = [int] $WorkData.Season;
# Episode = [int] $Result[2];
# newFullName = "{0} S{3:00}E{1}{2}" -f $Result[1], $Result[2], $File.Extension, $WorkData.Season;
#};
#$OutputData2 | ConvertTo-Json;
#Write-Output $File;
#Write-Output $File.Name;
#Write-Output $newName;
#return $newName;
return $OutputData ;
return $OutputData ;
}
}
@ -180,8 +145,8 @@ exit 0;
# SIG # Begin signature block
# SIG # Begin signature block
# MIIFxwYJKoZIhvcNAQcCoIIFuDCCBbQCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# MIIFxwYJKoZIhvcNAQcCoIIFuDCCBbQCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUDqcimTh1uRkBM2wZ3oxWPCw2
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUoj6O9AeGdF5M/FWDj5z18zw0
# SQ+ gggNSMIIDTjCCAjagAwIBAgIQdMnAQ4BDAo9Lgfn+QeDdhjANBgkqhkiG9w0B
# 4Jq gggNSMIIDTjCCAjagAwIBAgIQdMnAQ4BDAo9Lgfn+QeDdhjANBgkqhkiG9w0B
# AQUFADAqMRMwEQYDVQQDDApOaWNrIENoYW5nMRMwEQYDVQQKDAplYXJpY2sub3Jn
# AQUFADAqMRMwEQYDVQQDDApOaWNrIENoYW5nMRMwEQYDVQQKDAplYXJpY2sub3Jn
# MB4XDTIxMTAzMTEwMDI1MVoXDTIyMTAzMTEwMjI1MVowMzEiMCAGCSqGSIb3DQEJ
# MB4XDTIxMTAzMTEwMDI1MVoXDTIyMTAzMTEwMjI1MVowMzEiMCAGCSqGSIb3DQEJ
# ARYTcGNuaWNrMTAwQGdtYWlsLmNvbTENMAsGA1UEAwwETmljazCCASIwDQYJKoZI
# ARYTcGNuaWNrMTAwQGdtYWlsLmNvbTENMAsGA1UEAwwETmljazCCASIwDQYJKoZI
@ -202,11 +167,11 @@ exit 0;
# AgEBMD4wKjETMBEGA1UEAwwKTmljayBDaGFuZzETMBEGA1UECgwKZWFyaWNrLm9y
# AgEBMD4wKjETMBEGA1UEAwwKTmljayBDaGFuZzETMBEGA1UECgwKZWFyaWNrLm9y
# ZwIQdMnAQ4BDAo9Lgfn+QeDdhjAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEK
# ZwIQdMnAQ4BDAo9Lgfn+QeDdhjAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEK
# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3
# AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUZ98/I+dj0JylJtN V
# AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUZh3cBrwgHvdFbQw V
# 6S37dg5/QPEwDQYJKoZIhvcNAQEBBQAEggEABCrG4XNbnCRBIlDyHFCXMJ4vucsD
# WcdOMvw1legwDQYJKoZIhvcNAQEBBQAEggEAGR0QzX3t1drjorcTh759QopFrvNd
# p4roqcdLmtM/g75EEus9h/qXMF/CLbc3BDbSEHGXnEk2OO3MN7+HWUudbAxvBfUE
# bb9VtZx5OJsLD8/v4YuNBB0IYT+03OSK7jWyIyH5OEj/jTn/Uj1WG37vu/GDdsmm
# z8xTGSNCoNgWhPmEj859OOCu5i7Y1XIEkF89v5nPOzblTMesSdm44FQaBtrC1bHM
# dp/3PWziGclgh0QrJmZjQPavqFXHpUrRCIQqT2J9Er4zMf95zWEu1Zsgpb/DNJqu
# z0dx+mnz0Zak7MzWkXUnyIeoKc2vM4eGlR/pBxXO7n5ycp70lL5rRWX9eVTT4r96
# 4gz5d7Yn+wllud0DuOiQDwz9fpSz+lgMhMybqR+wsW8ROLvzCuTHJaNvKffm7vFG
# dW7ZUpL9Gwcq0PHLNg7rFgUmLSkMO3jUiIat0DBSJGkzUfVUhfpIPkG77auVLJKR
# NjbwZccH9xULGbAakX6H2lbcaMqGlkLYVkP3FRmk2zTG+qR4jxHzYhsttKb2ClSt
# YdfUqFL+zrq6GhSrKsD7cz5GC4I9RuaFuykGDqW6aZ93PSRlXxmw32GVvQ ==
# L2qRWv7KJCPnw4RpFx/+L9buDHH25QERiINEOPF/pfpqHhaENTolaUe7vg ==
# SIG # End signature block
# SIG # End signature block