0

バッチファイルを作成したいとしましょう。私はビデオ ファイルを扱っており、このよく知られたツール MediaInfo を使用しています。また、Windows には CLI バージョンがあります。

フォルダー内の一連のファイルの名前を変更したいとしましょう。だから私はこれを実行します:

for /r %%i in (*.mkv) do call ren "%%i" "renamed_files.mkv"

つまり、ディレクトリ内のすべての.mkvファイルを取得して名前を変更します。それは素晴らしいことです。

.mkvしかし、すべてのファイルではなく、特定のファイルのみの名前を変更したい場合はどうすればよいでしょうか? たとえば.mkv、音声のあるファイルとないファイルが複数あります。そして、オーディオがあるものだけの名前を変更したいとしましょう。そのためには、オーディオを含むファイルをスキャン/検出するためのソリューションを使用する必要があります。そのために、MediaInfo CLI を使用しない理由を考えました。したがって、次のコマンドを実行します。

mediainfo --inform="Audio;%ID%" file.mkv

2すると、オーディオ トラックの ID が出力されます。この ID を使用して、オーディオが存在し、.mkvファイルの名前を変更する必要があることを確認できます。また、音声がない場合は何も出力されず、空の行になるため、それらのファイルはスキップする必要があります。

理にかなっていますが、それをifステートメントにまとめて機能させる方法がわかりません。コマンドプロンプトとバッチファイルを2日間学習しています。

または、誰かがさらに良い解決策を知っているかもしれません。そのためのGUIを備えたサードパーティのソフトウェアをインストールすることに興味がないことを除いて。

乾杯!

4

1 に答える 1

0

試す

for /r %%i in (*.mkv) do (
  for /f "usebackq" in %%a (´mediainfo --inform="Audio;%ID%" file.mkv´) do set "audio=%%a"
  if defined audio (
    call ren "%%i" "renamed_files.mkv"
  )
)

2 番目のforループは、括弧内のコマンドを実行し、audio変数をコマンドが返す値に設定します。何も返さない場合、audio変数は未定義になり、この場合、ifブロックは実行されません。

于 2017-03-18T10:33:17.287 に答える