web-dev-qa-db-ja.com

Windowsで出力を「grep」するにはどうすればよいですか

Ffmpegで動画の長さを取得するために私が見つけたすべての回答には、grepが含まれています。これはcmdにはネイティブにはありません。

「Grepforwindows」というものがあることは知っていますが、コマンドラインに付属している関数を使用したいと思います。

だから私がするときffmpeg -i input私は得る

Input #0, flv, from 'vid_test001.flv':
  Metadata:
    creationdate    : Fri Sep 19 15:58:17
  Duration: 00:00:12.44, start: 0.000000, bitrate: 806 kb/s
    Stream #0:0: Video: flv1, yuv420p, 320x240, 1k tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: nellymoser, 22050 Hz, mono, flt

これから期間を取得したいのですが、この場合は「00:00:12.44」です。

4
user229061
ffmpeg -i "inputFile" 2>&1 | for /f "tokens=2 delims=, " %a in ('findstr /r /c:"^ *Duration:"') do echo %a

入力ファイルでffmpegを実行し、stderrの出力(ffmpegがデフォルトで情報を書き込む)を標準出力に送信します。リストをfindstrでフィルタリングして、スペースで始まり、その後にDuration:が続く行を取得します。見つかった行ごとに、フィールド区切り文字と見なされるスペースとコンマ、および行の2番目のトークン、つまりDuration:ラベルの後の時間が要求されます。この値は、コンソールにエコーされるfor置換可能パラメーター%aに取得されます。

バッチファイルから使用するには、パーセント記号をエスケープし、%%%に置き換えます。

4
MC ND

Powershell(最近のバージョンのWindowsで標準装備されています)の使用に反対しない場合は、Select-Stringコマンドを使用できます。

これは別のスーパーユーザーの質問からの素晴らしい投稿です- link

基本的に、コマンドの出力を取得して、結果をselect-stringにパイプすることができます。

1
Kris Powell