########################################################################################### ########### DMMで動画を検索しやすいように数字部分を5桁にするサポートスクリプト ############ # # 変換例) # AAA123 → AAA00123 # AAA-123 → AAA00123 # あれやAAA123これや → AAA00123 # # 仕様に伴う制限による誤変換例) # AAA-123 A → AAA00123 ← 添え字を認識しないので全部同じファイル名になる # 99AAA-123 → AAA00123 ← 頭に数字がつく型番を意識しないので型式を間違う # AAA123BBB456 → AAA00123 ← 最初にマッチしたものを使うのでBBB456は無視される # AAA000123 → AAA000123 ← 6桁以上はそれらしき部分の抽出のみ # ########################################################################################### # Copyright (C) Artin. 2020. ########################################################################################### ######## ================= 起動されて最初に動き出すのはここから ================== ######## ########################################################################################### ### コマンドラインパラメータで渡された数だけループする foreach($targetfile in $args) { ### === パラメータから各種情報を分解 # 渡されたファイル名のうち、パスをのぞくファイル名本体部分 [string]$filename = [System.IO.Path]::GetFileName($targetfile) # 渡されたファイル名のうち、ファイル名をのぞくディレクトリ部分 [string]$filedir = [System.IO.Path]::GetDirectoryName($targetfile) # ファイル名本体部分から拡張子を除いた部分 [string]$filenamebody = [System.IO.Path]::GetFileNameWithoutExtension($filename) # ファイル名の拡張子 [string]$filext = [System.IO.Path]::GetExtension($filename) #型番と思われる部分を抽出する $productcode_base = "" $productcode_num = "" $productcoderegex = [regex]'([A-Za-z]+)[_\-]*([0-9]+)' $matches = $productcoderegex.Matches($filenamebody); if($matches.Success) { # 英字の部分 $productcode_base = $matches[0].groups[1].value # 数字の部分 $productcode_num = $matches[0].groups[2].value # 正常に抽出できた場合のみリネームする #数字が5桁になるまで先頭に0を足す while($productcode_num.Length -lt 5) { $productcode_num = "0" + $productcode_num } # ファイル名合体 $newfilename = $productcode_base + $productcode_num + $filext # ディレクトリをつける if($filedir.Length -gt 0) { $newfilename = Join-Path $filedir $newfilename } # リネームする。rename-itemだとカッコが入ったファイル名を渡すと失敗するのでmoveで代用 # すでに同じ名前のファイルがあると、この関数は失敗する(上書きしない) # -LiteralPathを付けないと[]がついているファイル名をリネームできない if(Test-Path -LiteralPath $targetfile) { #ファイルのみのリネーム処理 [System.IO.File]::Move($targetfile,$newfilename) #カスタマイズ: フォルダのリネームにも対応する場合は上をコメントアウトして、下をコメント外す #Move-Item -LiteralPath $targetfile $pkgfilename } } }