[バッチファイル]指定ファイルをサブディレクトリを含み検索・処理する

このQ&Aのポイント
  • WindowsXP Pro SP3を使用して、特定のファイルをサブディレクトリ内で検索および処理する方法について教えてください。
  • 具体的には、指定した対象ファイル(mpeg2)をFFmpegを使用してmpeg1に変換し、同一ディレクトリに出力する方法を知りたいです。
  • バッチファイル内で、ディレクトリとサブディレクトリを順番に探索し、対象ファイルが見つかった場合にFFmpegの処理を行い、次の対象ファイルを探す方法がわかりません。
回答を見る
  • ベストアンサー

[バッチファイル]指定ファイルをサブディレクトリを含み検索・処理する

■WindowsXP Pro SP3 ■ディレクトリ構造 カレント ├ディレクトリ1  ├サブディレクトリ1-1   ├対象ファイル1-1  ├サブディレクトリ1-2   ├対象ファイル1-2 ├ディレクトリ2  ├サブディレクトリ2-1 ・ ・ ・ このような状態で指定したファイルすべてを見つけ出し、1つ1つ処理を行っていくバッチファイルの書き方を教えて頂きたいです 具体的には、指定する対象ファイルというのがmpeg2ファイルで、そのmpeg2ファイルをすべてFFmpegを用いてmpeg1へ変換しinputと同一ディレクトリに出力するといった動作です 考えた流れはこんな感じなのですがどうにもうまく動作しなくて困っています ディレクトリ1 ディレクトリ1内のサブディレクトリ1-1 サブディレクトリ1-1内の対象ファイル1-1を見つける 見つかったときはFFmpegの処理をする FFmpegが処理し終わったら次の対象ファイルを探す FFmpegの記述は FFmpeg.exe -i "input_file" "output_file" のような感じなのでパスや相対指定を使えば理想通りの動作をすると思うのですが、いま一つ書き方がわかりません

質問者が選んだベストアンサー

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.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                [←移動前のディレクトリに戻る]  ) )

関連するQ&A

  • サブディレクトリも含めて最新のファイルを調べる

    Linux 上のあるディレクトリ配下に存在するすべてのファイルの中で(サブディレクトリ配下も含めて) 更新日時が最新のファイルを抽出したいのですが やり方をご存知であれば教えてください。 ディレクトリが一つだけ or 対象が特定できるなら ls -lrt とかで分かりますが 再帰的にすべてのサブディレクトリを対象としたいのです。 できれば1回のコマンド(ワンライナー)で実行できるとありがたいですが、 それはさすがに大変な気がしますので、 あくまでできればということで。。

  • サブディレクトリも含む特定のファイルを削除したい

    UNIX系のコマンドで教えてください カレントディレクトリとそれ以下の階層全てのサブフォルダ内にある*.jpgというファイルを削除するにはどうすればいいでしょうか? よろしくお願いします

  • バッチで指定ファイルの文末に改行コードをつけたい

    指定フォルダ内にある全てのテキストファイルの文末に改行コードをつけたいと思っています。 しかし指定フォルダの中にあるサブフォルダやファイル名は不変ではありません。 量も大変な数があるためバッチファイルを作ろうとしています。(*.bat) あるフォルダを指定すればそのフォルダに含まれるサブフォルダも対象とし 全てのテキストファイルの文末に改行コードをつけたいのですが バッチファイルにはどのように記述すればよいのでしょうか? 理想ではそのバッチファイルが実行されているフォルダをカレントディレクトリとして取得し そのカレントディレクトリ内のテキストフォルダ(ここでのフォルダ名は固定の予定)を指定フォルダとしたいです。 以前ほんの少しだけプログラムを触った事がある程度でコマンドプロンプトは殆ど触った事がありません。 下記のようなページを参考にしていますがうまくいきませんでした。 どなたか御教授して頂けないでしょうか。 http://okwave.jp/qa/q6496815.html http://okwave.jp/qa/q4632586.html http://oshiete.sponichi.co.jp/qa5051199.html

  • バッチでサブフォルダ内のファイルも含めたコピー処理をするには

    DOSコマンドのコピーコマンドについての質問です。 指定されたフォルダ内のファイル全て(サブフォルダ内に格納されているファイルも全て)をc:\bkup\にコピーするバッチを組みたいのですがどのようにすればよいのでしょうか。 xcopy /y /e %1 c:\bkup\ とした場合、サブフォルダもコピー対象に入りますがサブフォルダ内のファイルの格納先がc:\bkup\サブフォルダ名\になってしまい、私の実現したい処理とは異なります。 サブフォルダ内のファイルもc:\bkup\にコピーするにはどうすればよいのでしょうか。 宜しくお願い致します。

  • サーバカレント配下サブフォルダ内にファイルをアップさせたいのですが…

    ブラウザからローカルのファイルを指定して、実行ボタンを押すとサーバに、指定したファイルがアップされるプログラムを作成中です。 『copy($file, $file_name);』で、サーバにアップされるところまでは出来たのですが、このソース(.php)が存在するカレントに、ファイルがアップされてしまいます。 カレント配下に作成してあるサブフォルダ内にアップさせるには、どうすれば良いでしょうか? (もしくは、カレントにアップされたファイルを配下サブフォルダに移動でも良いですが) <以下PHPソースの抜粋> ~~~~~~~~~~~8<~~~~~~~~~~~~8<~~~~~~~~~~~ <TD nowrap><FONT size="-1">ファイル file</FONT></TD> <TD nowrap> <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" SIZE="65536"> <INPUT TYPE="file" NAME="file" SIZE="42"> </TD> ~~~~~~~~~~~8<~~~~~~~~~~~~8<~~~~~~~~~~~ <TD nowrap><INPUT id=submit1 NAME=submit1 type=submit value=" 実 行 "></TD> ~~~~~~~~~~~8<~~~~~~~~~~~~8<~~~~~~~~~~~ if ($file_name != '' && $file_size != 0) { copy($file, $file_name); } ~~~~~~~~~~~8<~~~~~~~~~~~~8<~~~~~~~~~~~

    • ベストアンサー
    • PHP
  • サブディレクトリからファイルやディレクトリを上の階層へ移動する.2

    D=ディレクトリ(フォルダ) F=ファイル D1 ├ D2 │ └ F1 └ D3   └ D4     ├ F2     └ F3 先ず例えば指定したディレクトリをD1とした場合、 D2、D3、はディレクトリとみなしサブディレクトリは D2、D3、以降に保存されているディレクトリをサブディレクトリとみなします。 この場合D4がサブディレクトリにあたるという事になります。 保存されているファイル、フォルダの階層がこの様な内容だった場合、 サブディレクトリであるD4から、F2、F3を上の階層へ移動させる(D3へ移動させる)方法を探しています。 D1 ├ D2 │ └ F1 └ D3   ├ F2   ├ F3   └ D4 ↑ちなみに作業終了後はこのような状態になっていれば良い。 尚、その際D4は削除されてもされなくとも構いません。 このような階層内容のフォルダが複数あるので 指定したディレクトリに対しこのような動作を自動的に行ってくれると望ましい。 若干分かり難いかもしれませんが、この様な動作や 又、似たような動作を指定したディレクトリに対し行ってくれるツールや方法を探しています。 ご存知の方、心当たりのある方、回答していただけると幸いです、よろしくお願いします。 以前も似たような質問をしたのですが解決に至る回答は得られませんでした。 なので再度質問させてもらいました、何卒よろしくお願い致します。

  • 指定したフォルダからファイル名を取得する方法

    指定したフォルダからファイル名を取得するプログラムを作成しています。カレントディレクトリは上手く読み込めるのですが、サブディレクトリに入ると、アルファベット順にファイルを読んでいくため、そのサブディレクトリのファイルを全て読み込む前にまた別のサブディレクトリに飛んでしまいます。 何か良い方法はないでしょうか? 宜しくお願い致します。

  • バッチファイルのディレクトリ内のファイル検索について

    バッチファイルのディレクトリ内のファイル検索について お世話になります。 現在カレントに6つのディレクトリとバッチがあります。 バッチを叩くと指定ディレクトリのmakeファイルというファイルを実行するようにしています。 ですが構成を変えまして、サブディレクトリのmakeファイルも実行出来るように変更したいと思っています。 どのようにすればよろしいでしょうか? 以下が現在のソースです。 @echo off setlocal enabledelayedexpansion set DIRS=libSrc clientSrc serverSrc for /d %%a in (%DIRS%) do ( cd %%a cd if EXIST makefile.mak ( make %* ) else ( if EXIST Integ.bat ( call Integ.bat %* ) ) cd ..\ ) endlocal フォルダ構成は bin clientSrc include lib libSrc serverSrc となっており、makeファイルはclientSrc、libSrc、serverSrcにあります。 そこでlibSrcだけ新たにフォルダを2つ作成し、そのフォルダの中のmakeファイルも拾えるようにしたいです。 よろしくお願いします。 bin clientSrc ---- makeファイル include lib libSrc ----|--- myLib ----- makeファイル |--- socketLib --- makeファイル serverSrc---makeファイル batファイル

  • Perl で ディレクトリ及びサブディレクトリの容量を取得したい

    Perlについて質問します。 Perlで特定のディレクトリ及び、サブディレクトリ全てのファイルの容量を取得する方法についてです。 opendir、readdir関数を使用し指定した階層の合計が表示できたが、それより1つ下の、サブディレクトリはファイルを読み込めませんでした。 どうすればサブディレクトリのファイルも読み込んでもらえるでしょうか。 よろしくお願いします。

  • ディレクトリの指定

    C++でファイルを処理するプログラムを作っています。ディレクトリを指定してそのディレクトリの中にあるファイルの入出力を行う場合、ディレクトリの指定はどのように行えばいいんでしょうか?どなたか教えてください。よろしくお願いします。