*TsRenameでのリネーム後のファイル名でバッチ処理をしてみる [#c4a09772]
 TsRenameというTSファイルのEPGを読み取ってファイル名を変更してくれる便利なツールがありますが、~
 バッチ処理をするときはリネーム後のファイル名がわからないということがあったりします。~
 ~
 リネームした後のファイルをバッチ処理する方法をなんとなく考えてみました。~
 あまり意味ないけどw~
 ~
 [ダウンロード]~
 #ref("TsRename2.lzh")
 #ref("TsRename2_03.lzh")
 
 **GetFile_ID.exe [#s95a0e0b]
 ファイルの一意のID(数値)を表示するツールです。~
 ファイルのディスク上での一意のID(数値)を表示するツールです。~
 このツールでIDを表示するとリネームしても同じIDが表示されます。~
 同じディスク内でmoveしたときはNTFSだと同じIDを維持しますがFATだと変化します。
 
 **TsRename2.bat [#l63d8c9e]
 GetFile_ID.exeを使ったバッチファイルです。~
 複数ファイルをまとめてドラッグすれば順次処理します。~
 バッチ処理の最後にやりたい処理を追記して使います。~
 バッチ処理の最後にやりたい処理を追記、またはcallで呼び出して環境変数の設定をさせて使います。~
 
  @echo off
  rem TsRename2
  
  rem 複数ファイル対応
  :loop
  call :f0 "%~1"
  if /I "%~x1" == ".ts" call :func "%~1"
  shift
  if not "%~1" == "" goto loop
  exit /b
  
  rem 元ファイルのIDを取得
  :f0
  :func
  set FILE=%~1
  set DIR=%~dp1
  for /f "usebackq" %%A in (`GetFile_ID.exe "%FILE%"`) do set FILE_ID=%%A
  
  for /f "usebackq" %%A in (`GetFile_ID.exe "%FILE%"`) do call :f1 %%A
  exit /b
  
  rem TsRenameの実行
  :f1
  set FILE_ID=%1
  
  TsRename.exe -auto -quit "%FILE%"
  
  rem ファイル一覧を取得
  for /r "%DIR%" %%B in (*.*) do call :f2 %%B
  exit /b
  
  rem IDが一致するファイルを検索
  :f2
  for /f "usebackq" %%C in (`GetFile_ID.exe "%~1"`) do (
  if "%FILE_ID%" == "%%C" call :FINE "%~1"
  for /r "%DIR%" %%B in (*.ts) do (
   for /f "usebackq" %%C in (`GetFile_ID.exe "%%~B"`) do (
    if "%FILE_ID%" == "%%C" set RENAME=%%~B
   )
  )
  
  rem =========== ここから下を書き換えて使う ===============
  echo リネーム前のファイル名:"%FILE%"
  echo リネーム後のファイル名:"%RENAME%"
 
 -メモ~
 for文中で環境変数を一時変数用には使えないようです。~
 set文を複数回実行すると最後の値のみが反映されるような。~
 
 **TsSplitHD_Demux.bat [#y22719f9]
 TsRename2.batを使った使用例。~
 TsSplitterでHD動画だけを分離してAVSファイルの作成まで行います。~
 分離後のファイル名は"_HD"を追加しただけの決め打ちで想定していますが。~
 ~
 ここではTsRename2.batをcallで呼び出して環境変数の設定をさせています。~
 
  @echo off
  :loop
  if /I "%~x1" == ".ts" call :func "%~1"
  shift
  if not "%~1" == "" goto loop
  exit /b
  
  rem リネーム後のファイルが見つかったときの動作
  :FINE
  set RENAME=%~1
  :func
  call TsRename2.bat "%~1"
  call :func2 "%RENAME%"
  exit /b
  
  rem =========== ここから下を書き換えて使う ===============
  echo リネーム前のファイル名:
  echo %FILE%
  echo リネーム後のファイル名:
  echo %RENAME%
  :func2
  set FTS=D:\VideoFiles\TS\%~n1_HD
  set FTMP=D:\VideoFiles\tmp\%~n1_HD
  set FAVS=D:\VideoFiles\avs\%~n1_HD
  
  TsSplitter -EIT -1SEG -SD "%~1" -OUT "D:\VideoFiles\TS"
  start "" /min /wait BonTsDemux.exe -start -quit -i "%FTS%.ts"
  move /y "%FTS%.m2v" "%FTMP%.m2v"
  move /y "%FTS%.wav" "%FTMP%.wav"
  DGIndex.exe -SD=" -IF="%FTMP%.m2v" -OF="%FTMP%" -minimize -exit
  
  echo MPEG2Source("%FTMP%.d2v") > "%FAVS%.avs"
  echo ConvertToYUY2() >> "%FAVS%.avs"
  echo AudioDub(last, WAVSource("%FTMP%.wav")) >> "%FAVS%.avs"
  echo return last >> "%FAVS%.avs"
 
 **TaskSchedule.bat [#i9744bfa]
 指定した時間にまとめて処理したい場合は以下のようなバッチをタスクスケジューラに登録して使うといいかもしれません。~
 処理したいファイルをINDIRフォルダに移動しておけば処理後はOUTDIRフォルダに移動されます。~
 
  @echo off
  rem タスクスジェジューラでまとめ処理
  set INDIR=D:\IN_TS\
  set OUTDIR=D:\OUT_TS\
  
  for /r "%INDIR%" %%A in (*.ts) do call :func "%%~A"
  exit /b
  
  :func
  call TsSplitHD_Demux.bat "%~1"
  move /y "%RENAME%" "%OUTDIR%"
 

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS