# #edcb録画後バッチ用パワーシェルファイルです #edcb rename script [RecAfterTSRename2.ps1] # # 機能:プログラム予約のファイル名の前に「番組タイトル名」をつけます # # 使い方:EpgDataCapBon フォルダに RecAfterTSRename2.ps1(powershell script)を置いてください # # ------------------------------------------------------------------ # 後バッチ用パワーシェルファイルです。(変数設定) # ------------------------------------------------------------------ # おまじないこれを書かないとEDCB環境変数取得できないらしい # _EDCBX_DIRECT_ # ------------------------------------------------------------------ $rec_path=${env:FolderPath} $rec_name=${env:FileName} $rec_ts=${env:FilePath} $rec_err="$rec_ts.err" $rec_txt="$rec_ts.program.txt" $rec_title='' # ------------------------------------------------------------------ # ログファイルの設定 # ------------------------------------------------------------------ #ログファイルの出力(出力しない:0 出力する:1) $log_output=1 #ログファイルの上書き(追記:0 上書き:1) $log_ovwerwrite=1 #ログファイル名 $log_name="$PSScriptRoot" + "\RecAfterTSRename_Log.txt" # ------------------------------------------------------------------ # 関数名 : WriteLog # 処理 : 日時を付与してメッセージを標準出力する。 # 引数 : 第1引数 - メッセージ # ------------------------------------------------------------------ if($log_ovwerwrite -eq 1){ Remove-Item $log_name } function WriteLog([string] $msg) { $now = Get-Date -Format "yyyy/MM/dd HH:mm:ss" $message = "$now $msg" Write-Host $message # 6番目の引数がないときはログを出力しない if($log_output -ne 0) { # ログファイルに出力 Write-Output $message | Out-File ${log_name} -Append -Encoding Default } } # ------------------------------------------------------------------ #System.IO.StreamReaderを利用した3行目だけを抽出するサンプルコード # ------------------------------------------------------------------ # 3行目の取得できるらしい(試していない) #Set-Item env:RecTitleName -Value $((Get-Content -LiteralPath "${env:FilePath}.program.txt")[2]) # ------------------------------------------------------------------ # 変換したいので(なぜ?)ひと手間入れます (?_?)エ? # ------------------------------------------------------------------ # .ts.program.txt が存在するかを確認: $rec_txt $result = (Test-Path $rec_txt) if($result){ #ファイルが存在する場合はこちらが実行されます。 #WriteLog "ファイルは存在します。: $rec_txt" }else{ #ファイルが存在しない場合はこちらが実行されます。 WriteLog "(err)ファイルは存在しません。: $rec_txt" exit } $i=1 $enc = [Text.Encoding]::GetEncoding("Shift_JIS") $fh = New-Object System.IO.StreamReader($rec_txt, $enc) while (($l = $fh.ReadLine()) -ne $null) { if($i -eq 3) { $rec_title=$l } $i++ } $fh.Close() if($rec_title -eq ''){ WriteLog "(err)タイトル名の取得に失敗しました。" exit } # ------------------------------------------------------------------ # 編集前タイトル: # ------------------------------------------------------------------ #WriteLog ("編集前タイトル: $rec_title") # ------------------------------------------------------------------ # 空白文字を削除する: $str = $str.Trim('  ') # ------------------------------------------------------------------ # 最初に全角スペースを trim します #WriteLog ('3行目(全角空白抜):' + "[" + $rec_title.Trim(" ") + "]") # 次に半角スペースを trim します #WriteLog ('3行目(半角空白抜):' + "[" + $rec_title.Trim(" ") + "]") # ------------------------------------------------------------------ # 全角空白文字を半角にする: $str = $str.Replace(' ', ' ') # ------------------------------------------------------------------ # ' ' を ' ' に置換 $rec_title = $rec_title.Replace(' ', ' ') #(平文) # Windowsでファイル名に使用できない禁止文字を全角に変換する #$rec_title = $rec_title.Replace('\', '¥') #$rec_title = $rec_title.Replace('/', '/') #$rec_title = $rec_title.Replace(':', ':') #$rec_title = $rec_title.Replace('*', '*') #$rec_title = $rec_title.Replace('?', '?') #$rec_title = $rec_title.Replace('<', '<') #$rec_title = $rec_title.Replace('>', '>') #$rec_title = $rec_title.Replace('|', '|') #(関数) # ------------------------------------------------------------------ # Windowsでファイル名に使用できない禁止文字を全角に変換する # 関数名:ConvertTo-UsedFileName # 引数 :FileName ファイル名 # 戻り値:変換後のファイル名 # https://gist.github.com/ao-zkn/3e97b82a116418197d26#file-convertto-usedfilename-ps1 # ------------------------------------------------------------------ function ConvertTo-UsedFileName([String]$FileName){ # 禁止文字(半角記号) $CannotUsedFileName = "\/:*?`"><|" # 禁止文字(全角記号) $UsedFileName = "¥/:*?`”><|" for ($i = 0; $i -lt $UsedFileName.Length; $i++) { $FileName = $FileName.Replace($CannotUsedFileName[$i], $UsedFileName[$i]) } return $FileName } $rec_title = ConvertTo-UsedFileName $rec_title # ------------------------------------------------------------------ # 編集後タイトル: # ------------------------------------------------------------------ #WriteLog ("編集後タイトル: $rec_title") # ------------------------------------------------------------------ # ファイル名生成 # # 注意:既に存在するファイルの場合、Renameする処理は入れていません。 # エラーになります。 # ------------------------------------------------------------------ # ★★★★★ここがキモです★★★★★ # ------------------------------------------------------------------ # タイトル名+プログラム予約録画名(ts) $rename_file = "$rec_path\$rec_title-$rec_name" # ------------------------------------------------------------------ $rename_ts = "$rename_file.ts" $rename_err = "$rename_file.err" $rename_txt = "$rename_file.program.txt" #WriteLog ("TS:$rename_ts") # ------------------------------------------------------------------ # ファイル名変更(フルパス:Move-Item) # 関数名:MoveTo-FileName # 引数 :OldFileName ファイル名 # 引数 :NewFileName ファイル名 # ------------------------------------------------------------------ function MoveTo-FileName([String]$MoveToOldName, [String]$MoveToNewName){ if(Test-Path $MoveToOldName){ #ファイルが存在する場合はこちらが実行されます。 try { Move-Item $MoveToOldName $MoveToNewName } catch { #$error[0] | Out-String | Out-File ("$PSScriptRoot" + "\RecAfterTSRename2err.log") WriteLog $error[0] } WriteLog ("ReName: $MoveToNewName") }else{ #ファイルが存在しない場合はこちらが実行されます。 WriteLog ("(err)not found: $MoveToOldName") } } # ------------------------------------------------------------------ # ファイル名変更(ファイル名のみ:Rename-Item、パス付:Move-Item) # ------------------------------------------------------------------ # .ts MoveTo-FileName $rec_ts $rename_ts # .err MoveTo-FileName $rec_err $rename_err # .ts.program.txt MoveTo-FileName $rec_txt $rename_txt # ------------------------------------------------------------------ # デバッグ用変数表示 # ------------------------------------------------------------------ #WriteLog "$rec_ts" #WriteLog "$rec_path" #WriteLog "$rec_txt" #WriteLog "$rec_err" #WriteLog "$rec_name" #WriteLog "$log_name" #WriteLog ("ScriptRoot: $PSScriptRoot") # ファイルのフルパス(バッチのみ) #WriteLog ${env:FilePath} # ファイルのフォルダパス(最後に\はなし)(バッチのみ) #WriteLog ${env:FolderPath} # ファイル名(拡張子なし)(バッチのみ) #WriteLog ${env:FileName} # 番組名(予約一覧の番組名に表示されているもの) #WriteLog ${env:Title} # 番組名([]の括弧でくくられている部分を削除したもの) #WriteLog ${env:Title2} # サービス名(予約一覧の放送局に表示されているもの) #WriteLog ${env:ServiceName} # 録画結果のドロップ数(バッチのみ) #WriteLog ("Dorps: ${env:Drops}") # 録画結果のスクランブル数(バッチのみ) #WriteLog ("Scrambles: ${env:Scrambles}") # 録画結果のコメント(バッチのみ) #WriteLog ${env:Result} # $Titleと同内容でファイル名に使用できない記号が存在した場合全角に変換するもの(バッチのみ) #WriteLog ${env:TitleF} # $Title2と同内容でファイル名に使用できない記号が存在した場合全角に変換するもの(バッチのみ) #WriteLog ${env:Title2F} # EPG自動予約で登録されたキーワード(バッチのみ) #× WriteLog ${env:AddKey} #WriteLog ("edcb rename script fin.")