- ベストアンサー
[バッチファイル]指定ファイルをサブディレクトリを含み検索・処理する
- WindowsXP Pro SP3を使用して、特定のファイルをサブディレクトリ内で検索および処理する方法について教えてください。
- 具体的には、指定した対象ファイル(mpeg2)をFFmpegを使用してmpeg1に変換し、同一ディレクトリに出力する方法を知りたいです。
- バッチファイル内で、ディレクトリとサブディレクトリを順番に探索し、対象ファイルが見つかった場合にFFmpegの処理を行い、次の対象ファイルを探す方法がわかりません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
"FFmpeg.exe"が複数起動可能なのか、単独でしか起動できないのか、実行後、"ERRORLEVEL"が返って来るのか、使ったことがなくてわからないことばかりなので、一般的なファイル検索&コマンド実行の方法として、"for"文を使う方法です。 以下、"[←"~"]"は解説なので実際のバッチファイルでは削除してください。ファイルの拡張子".mpeg1"、".mpeg2"は適当に付けただけなので、実際のファイルの拡張子を指定してください。変換前と変換後のファイルの拡張子が違うものになるように指定しないと、変換したファイルまで変換対象になってしまいます。 for /d %%D in ( * ) do ( [←ディレクトリ1~ディレクトリ2・・・の検索] if not "%%D"=="" ( [←"%%D"が空でない時、以下を実行] pushd "%%D" [←見つかったディレクトリへ移動] for /d %%S in ( * ) do ( [←サブディレクトリ1-1~・・・の検索] if not "%%S"=="" ( [←"%%S"が空でない時、以下を実行) pushd "%%S" [←見つかったサブディレクトリへ移動] for %%F in ( *.mpeg2 ) do ( [←拡張子".mpeg2"のファイルを検索) if not "%%F"=="" ( [←"%%F"が空でない時、以下を実行] "C:\ProgramFiles\(FFmpegのインストールフォルダ\FFmpeg.exe" -i "%%F" "%%~nF.mpeg1" [↑入力ファイルとして"%%F"を、出力ファイルとして"%%F"の拡張子を".mpeg1"に変更したファイル名を指定して実行] pause [←複数起動しないように一旦停止。"FFmpeg.exe"が実行後、"ERRORLEVEL"を返すなら、"if"文で"ERRORLEVEL"を判定して、続行 or 待機するようなバッチも書ける] ) ) popd [←移動前のディレクトリに戻る] ) ) popd [←移動前のディレクトリに戻る] ) )