@ -1,6 +1,7 @@
					 
			
		
	
		
			
				
					 param (  
			
		
	
		
			
				
					    $Path ,   
			
		
	
		
			
				
					    $Index  =  " H:\AnimeLib " ,   
			
		
	
		
			
				
					    $VarConfig ,   
			
		
	
		
			
				
					    [switch]  $Single ,   
			
		
	
		
			
				
					    [switch]  $Force ,    
			
		
	
		
			
				
					    [switch]  $Sub   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -13,10 +14,46 @@ $TargetName = ""
					 
			
		
	
		
			
				
					#$DestinName = "真の仲間"  
			
		
	
		
			
				
					Write-Output  $Path  
			
		
	
		
			
				
					#$Index = "L:\AnimeLib"  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# scriptblock 減少重複  
			
		
	
		
			
				
					$RegexpSet  =  {  
			
		
	
		
			
				
					    # 全域化   
			
		
	
		
			
				
					    # 因應檔名不同而設定多組正規方式   
			
		
	
		
			
				
					    Set-Variable  -Name  " EpisodeRegex "  -Scope  global  -Value  @ (   
			
		
	
		
			
				
					        " (?:S\d{2})?[\s]?-[\s]E?(?<Episode>\d{2}) "   
			
		
	
		
			
				
					        " [\[\b\s](?<Episode>\d{2})[\s_]?(?:[vV]\d|END|FIN)[\]\b\s] "   
			
		
	
		
			
				
					        " \[(?<Episode>\d{1,2})\D{2}\] "   
			
		
	
		
			
				
					        " \[(?<Episode>\d{1,2})\] "   
			
		
	
		
			
				
					    )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    Set-Variable  -Name  " NameRegex "  -Scope  global  -Value  @ (   
			
		
	
		
			
				
					        " [\[\b\s](?<Name>[^\[\]]*)[\]\b\s]? $ "   
			
		
	
		
			
				
					    )   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					if  ( $VarConfig )  {  
			
		
	
		
			
				
					    if  ( Test-Path  $VarConfig )  {   
			
		
	
		
			
				
					        $T  =  Get-Content  -Encoding  UTF8  $VarConfig  |  %  {  $H  =  @ { }  ;  $S  =  $null }  {   
			
		
	
		
			
				
					            if  ( $_  -match  " ^\[(?<T>\w*)\] "  )  {   
			
		
	
		
			
				
					                $S  =  $Matches [ " T " ]   
			
		
	
		
			
				
					                $H . add ( $S ,  @ ( ) )   
			
		
	
		
			
				
					            }  elseif  ( $_  -match  " .+ "  )  {   
			
		
	
		
			
				
					                $H [ $S ]  =  $H [ $S ]  +  @ ( $_  -replace  '"' ,  '' )   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					        }  {  $H  ;  Clear-Variable  -Name  " H " }   
			
		
	
		
			
				
					        $T . GetEnumerator ( )  |  %  {  Set-Variable  -Name  $_ . name  -Value  $_ . value }   
			
		
	
		
			
				
					    }  else  {   
			
		
	
		
			
				
					        & $RegexpSet   
			
		
	
		
			
				
					        $EpisodeRegex  |  %  { " [EpisodeRegex] " } {  " "" $ _ "" "  } { " " }  |  Out-File  -Encoding  UTF8  $VarConfig   
			
		
	
		
			
				
					        $NameRegex  |  %  { " [NameRegex] " } {  " "" $ _ "" "  }  |  Out-File  -Encoding  UTF8  -Append  $VarConfig   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					}  else  {  
			
		
	
		
			
				
					    & $RegexpSet   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					#$Path = "L:\Anime\202001 ネコぱら\[Nekomoe kissaten][Nekopara][01-12][BDRip][1080p][CHT]\[Nekomoe kissaten][Nekopara][12][1080p][CHT].mp4"  
			
		
	
		
			
				
					#$Path = "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"  
			
		
	
		
			
				
					#$Path = "H:\Anime\201901 盾の勇者の成り上がり\[LKSUB][Tate no Yuusha no Nariagari][01-25][GB][720P][MP4]\[LKSUB][Tate no Yuusha no Nariagari][01][GB][720P].mp4"  
			
		
	
		
			
				
					#$Path = "H:\Data\Downloads\因為不是真正的夥伴而被逐出勇者隊伍\[Shin no Nakama][01][BIG5][1080P].mp4"  
			
		
	
		
			
				
					$JsonPath  =  $ ( " $ Index\Anime\*  $ TargetName " ,  $ ( $Path  -replace  '(.*\\[^\[\\\]]*)\\\[.*' ,  '$1' )  |  ?  { Test-Path  $_ } )  
			
		
	
		
			
				
					$WorkData  =  $ ( if  ( Test-Path  " $ JsonPath\animelibk.json " )  {  
			
		
	
		
			
				
					    Get-Content  " $ JsonPath\animelibk.json "  |  ConvertFrom-Json   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -42,11 +79,15 @@ if (-not($WorkData.Episode)) {
					 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					$WorkData  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					$Seasons_TC  =  " " ,  " 第一季 " ,  " 第二季 " ,  " 第三季 " ,  " 第四季 " ,  " 第五季 "  
			
		
	
		
			
				
					#$Seasons_TC = "", "第一季", "第二季", "第三季", "第四季", "第五季"  
			
		
	
		
			
				
					$Seasons_TC  =  " " ,  " Seasons 1 " ,  " Seasons 2 " ,  " Seasons 3 " ,  " Seasons 4 " ,  " Seasons 5 "  
			
		
	
		
			
				
					$Lang  =  @ {  
			
		
	
		
			
				
					    Season  =  " Season {0:00} "   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					$Year  =  @ ( $ ( $JsonPath  -replace  '.*\\((?<Y>\d{4})?(?<M>\d{2})?).*$' ,  '${Y}' ) ,  $ ( get-date  -Format  'yyyy' ) )  |  ?  { -not ( [string] :: IsNullOrEmpty ( $_ ) ) }  |  Select  -First  1  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# 取得目標資料夾是否存在,不存在建立資料夾,並取得資料夾物件  
			
		
	
		
			
				
					$LinkPath  =  " {2}\{0}\{1} "  -f  $WorkData . DestinName ,  $Seasons_TC [ $WorkData . Season ] ,  $Index  
			
		
	
		
			
				
					$LinkPath  =  " {2}\{0}\{1} "  -f  $WorkData . DestinName ,  $ ( $Lang [ " Season " ]  -f  $WorkData . Season ) ,  $Index  
			
		
	
		
			
				
					$LinkDir  =  $ ( if  ( -not ( Test-Path  -Path  " $ LinkPath* " ) )  {  
			
		
	
		
			
				
					    New-Item  -Path  " $ LinkPath ( $ Year) "  -ItemType  Directory  -Force   
			
		
	
		
			
				
					}  else  {  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -66,19 +107,7 @@ function Get-StandName {
					 
			
		
	
		
			
				
					        Get-Item  -Path  $ ( Edit-PathChar  $FileObj )   
			
		
	
		
			
				
					    } )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # 因應檔名不同而設定多組正規方式   
			
		
	
		
			
				
					    $EpisodeRegex  =  @ (   
			
		
	
		
			
				
					        " (?:S\d{2})?[\s]?-[\s]E?(?<Episode>\d{2}) "   
			
		
	
		
			
				
					        " [\[\b\s](?<Episode>\d{2})[\s_]?(?:[vV]\d|END|FIN)[\]\b\s] "   
			
		
	
		
			
				
					        " \[(?<Episode>\d{1,2})\w{2}\] "   
			
		
	
		
			
				
					        " \[(?<Episode>\d{1,2})\] "   
			
		
	
		
			
				
					    )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    $NameRegex  =  @ (   
			
		
	
		
			
				
					        " [\[\b\s](?<Name>[^\[\]]*)[\]\b\s]? $ "   
			
		
	
		
			
				
					    )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    $Result  =  $File . Name  |  %  {  Get-NameRegex  $_  -Regex  $EpisodeRegex  }  |  %  {  $ ( Get-NameRegex  $_ [ " L " ]  -Regex  $NameRegex  -Exclude  " (BD|DVD|HDTV)RIP "  -End )  +  $_  }  |  Select  -First  1   
			
		
	
		
			
				
					    $Result  =  $File . Name  |  %  {  Get-NameRegex  $_  -Regex  $EpisodeRegex  }  |  %  {  $ ( Get-NameRegex  $_ [ " L " ]  -Regex  $NameRegex  -Exclude  " (BD|DVD|HDTV)RIP|BIG5 "  -End )  +  $_  }  |  Select  -First  1   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # 建立回傳資料物件,以方便後續資料處理。   
			
		
	
		
			
				
					    $OutputData  =  " "  |  Select  newName ,  Season ,  Episode ,  newFullName ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -140,38 +169,3 @@ $ENDResult = $BuildList | % {
					 
			
		
	
		
			
				
					if  ( -not ( $Sub ) )  {  $ENDResult  |  %  {  if  ( $_ . Episode )  {  $WorkData . Episode  + =  $_ . Episode  } } }  
			
		
	
		
			
				
					$WorkData  |  ConvertTo-Json  |  Out-File  -Encoding  " UTF8 "  " $ JsonPath\animelibk.json "  
			
		
	
		
			
				
					exit  0 ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					##### 以下試寫或測試用 #####  
			
		
	
		
			
				
					# SIG # Begin signature block  
			
		
	
		
			
				
					# MIIFxwYJKoZIhvcNAQcCoIIFuDCCBbQCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB  
			
		
	
		
			
				
					# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR  
			
		
	
		
			
				
					# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUnaUT7B6+atzTGRJLSX59DzPX  
			
		
	
		
			
				
					# fjGgggNSMIIDTjCCAjagAwIBAgIQdMnAQ4BDAo9Lgfn+QeDdhjANBgkqhkiG9w0B  
			
		
	
		
			
				
					# AQUFADAqMRMwEQYDVQQDDApOaWNrIENoYW5nMRMwEQYDVQQKDAplYXJpY2sub3Jn  
			
		
	
		
			
				
					# MB4XDTIxMTAzMTEwMDI1MVoXDTIyMTAzMTEwMjI1MVowMzEiMCAGCSqGSIb3DQEJ  
			
		
	
		
			
				
					# ARYTcGNuaWNrMTAwQGdtYWlsLmNvbTENMAsGA1UEAwwETmljazCCASIwDQYJKoZI  
			
		
	
		
			
				
					# hvcNAQEBBQADggEPADCCAQoCggEBAMEnEk3/5rkEMibDbbfOXQaerk5xXSJmY8gf  
			
		
	
		
			
				
					# FAVUbrGfjzYHcRsPRzdb/pstcZGS2XUCoX2a57lQhACStns9dXeYfWhzNeAiSEAy  
			
		
	
		
			
				
					# iaJzUj5ELcH5TzT+mjeJQX6upeHOexO1TmtuM6mugpl9SvNQFqbQXlPHHmoLE3OC  
			
		
	
		
			
				
					# UzzjEC0AkHkcSiLdqtmSbRmaomcDMbtJgZHUciWE/p6mmAbpv2R4rdKSYSiI8UsE  
			
		
	
		
			
				
					# UclzkeTNrYKmJNiM0R+X1LyZVY6HAHN8dR3tjBnEPYoPxRAz4d2FEajvumzosNUr  
			
		
	
		
			
				
					# ni9LROnRxQXa048ZcsNArNZDQXe+Rc+PWhzbqHhy8rBllgZ08XkCAwEAAaNnMGUw  
			
		
	
		
			
				
					# DgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaA  
			
		
	
		
			
				
					# FBXyUrhn78ppKe7GRmHS6vbsNae/MB0GA1UdDgQWBBRs5+Yfb/14jwpjUNpTUuR1  
			
		
	
		
			
				
					# 759t9TANBgkqhkiG9w0BAQUFAAOCAQEACSL1BqUcrqh+bBqr5rQ5mArCVxsBW92r  
			
		
	
		
			
				
					# HenPY48dKdhGgMODtxuo7osZLk7Il+aXhAsvNTSfmc92H5eDXFqZ565jm8r6FF1C  
			
		
	
		
			
				
					# f1oKxznmtxd4oyXflCRqBz+OGuXLq8dG9gWT7OisKWe0hifSMGaZ9afpNeiFLuD1  
			
		
	
		
			
				
					# GSGk5E0W+bUyezCmjOdNWYIW452brt8rJS21WWVVvrsGjgJoTdsoAkFek8OEm82+  
			
		
	
		
			
				
					# 1UR7xZOHybLvi8N0gvD+UFlVvcv6pmgUqaz5DS7J2si75Xj9pThE6/bPu/fkpc53  
			
		
	
		
			
				
					# gMbleXNaqXIKeJTbI5hi2crlKyXBe/GfuK0Tv+06S1sL32VAs1VwmjGCAd8wggHb  
			
		
	
		
			
				
					# AgEBMD4wKjETMBEGA1UEAwwKTmljayBDaGFuZzETMBEGA1UECgwKZWFyaWNrLm9y  
			
		
	
		
			
				
					# ZwIQdMnAQ4BDAo9Lgfn+QeDdhjAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEK  
			
		
	
		
			
				
					# MAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3  
			
		
	
		
			
				
					# AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUEzAOjNkB8uaWsHtC  
			
		
	
		
			
				
					# RUzsrJzTfYMwDQYJKoZIhvcNAQEBBQAEggEAnvzVdQvGridnk2wdfYs8SjLEZYhc  
			
		
	
		
			
				
					# K3b7zpo5sNczj/zEFSsCskDik+oJ7p+vRszo7WGNt2/vJsbFPsIROYkxzV5UdgZR  
			
		
	
		
			
				
					# BDTpQhcRLPSdw6kipbKk1MPD6nmpCqQ1BdsvALJH8BXxr8UlaYZMhLiUS8dVx1Vh  
			
		
	
		
			
				
					# Cr4zTBc1nmHf/QdLlNyHieCdCqwLam87yN03u9NXDqearWwP+Zh/58I+qCQjs3sU  
			
		
	
		
			
				
					# coB9S7DCjoMp0NCpntohLkB2ZyLXdfbQM4bNUqQra5bcZAUAx6pPaDucCAqVbTtY  
			
		
	
		
			
				
					# fhXHdsfH9i1gd2TQUYkMBW59QwWy3EyeC5eKkBO+aQUj+85PH8DQftKFsg==  
			
		
	
		
			
				
					# SIG # End signature block