# #edcb rename script [RecAfterTSRename.ps1] # #EpgDataCapBon フォルダに RecAfterTSRename.batとRecAfterTSRename.ps1(powershell script)の2つを置いてください #DOSバッチで全角文字の処理とか複雑なのでPowershellに投げました(負けました) #今日初めて触って、ネットから拾ったつぎはぎなんで、おかしいところは直して使ってね! # # ------------------------------------------------------------------ # バッチファイルから呼び出される側のパワーシェルファイルです。 # 引数 %TSNAME% %RECPATH% %RECTIME% %RECTXT% %RECNAME% %LOGNAME% # ------------------------------------------------------------------ #Write-Host ('渡された引数1個目:' + $Args[0] +' - %TSNAME%') #Write-Host ('渡された引数2個目:' + $Args[1] +' - %RECPATH%') #Write-Host ('渡された引数3個目:' + $Args[2] +' - %RECTIME%') #Write-Host ('渡された引数4個目:' + $Args[3] +' - %RECTXT%') #Write-Host ('渡された引数5個目:' + $Args[4] +' - %RECNAME%') #Write-Host ('渡された引数6個目:' + $Args[5] +' - %LOGNAME%') $rec_ts=$Args[0] $rec_path=$Args[1] $rec_time=$Args[2] $rec_txt=$Args[3] $rec_name=$Args[4] $log_name=$Args[5] $rec_title='' # ------------------------------------------------------------------ # 関数名 : WriteLog # 処理 : 日時を付与してメッセージを標準出力する。 # 引数 : 第1引数 - メッセージ # ------------------------------------------------------------------ function WriteLog([string] $msg) { $now = Get-Date -Format "yyyy/MM/dd HH:mm:ss" $message = "$now $msg" Write-Host $message # 6番目の引数がないときはログを出力しない if($log_name -ne $null) { # ログファイルに出力 Write-Output $message | Out-File ${log_name} -Append -Encoding Default } } # ------------------------------------------------------------------ #System.IO.StreamReaderを利用した3行目だけを抽出するサンプルコード # ------------------------------------------------------------------ # .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する処理は入れていません。 # エラーになります。 # ■■■■■■■■■■■■■■■■■■■■■■■■■■ # ■                        ■ # ■   日付と時間を足して重複しないように!    ■ # ■  (時間録画は番組名が基本的に同じなので)   ■ # ■                        ■ # ■■■■■■■■■■■■■■■■■■■■■■■■■■ # ------------------------------------------------------------------ $rename_file = $rec_path + '\' + $rec_title + '-' + $rec_time $rename_ts = $rename_file + ".ts" $rec_err = $rec_path + '\' + $rec_name + ".ts.err" $rename_err = $rename_file + ".err" $rec_txt = $rec_path + '\' + $rec_name + ".ts.program.txt" $rename_txt = $rename_file + ".ts.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 "error.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 ("edcb rename script fin.")