*TsRenameでのリネーム後のファイル名でバッチ処理をしてみる [#c4a09772] TsRenameというTSファイルのEPGを読み取ってファイル名を変更してくれる便利なツールがありますが、~ バッチ処理をするときはリネーム後のファイル名がわからないということがあったりします。~ ~ リネームした後のファイルをバッチ処理する方法をなんとなく考えてみました。~ あまり意味ないけどw~ ~ [ダウンロード]~ #ref("TsRename2_03.lzh") **GetFile_ID.exe [#s95a0e0b] ファイルのディスク上での一意のID(数値)を表示するツールです。~ このツールでIDを表示するとリネームしても同じIDが表示されます。~ 同じディスク内でmoveしたときはNTFSだと同じIDを維持しますがFATだと変化します。 **TsRename2.bat [#l63d8c9e] GetFile_ID.exeを使ったバッチファイルです。~ 複数ファイルをまとめてドラッグすれば順次処理します。~ バッチ処理の最後にやりたい処理を追記、またはcallで呼び出して環境変数の設定をさせて使います。~ @echo off rem 複数ファイル対応 :loop if /I "%~x1" == ".ts" call :func "%~1" shift if not "%~1" == "" goto loop exit /b rem 元ファイルのIDを取得 :func set FILE=%~1 set DIR=%~dp1 for /f "usebackq" %%A in (`GetFile_ID.exe "%FILE%"`) do set FILE_ID=%%A rem TsRenameの実行 TsRename.exe -auto -quit "%FILE%" rem IDが一致するファイルを検索 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] **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 :func call TsRename2.bat "%~1" call :func2 "%RENAME%" exit /b :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] **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%"