¿Cómo "grep" de salida en Windows [duplicado]

3

Esta pregunta ya tiene una respuesta aquí:

Cada respuesta que encontré para obtener la duración de un video con ffmpeg contiene grep, cual cmd no tiene nativamente

Sé que hay una cosa "Grep para Windows", pero prefiero usar una función que viene con la línea de comandos.

Así que cuando lo hago ffmpeg -i input yo obtengo

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

Me gustaría obtener la Duración de esto, que es "00: 00: 12.44" en este caso

Houseman
fuente
1
Instale Cygwin.
Daniel R Hicks
Puede canalizar la salida del comando en cmd como lo hace en el shell de Unix. Y hay algunos comandos como find, findstr que pueden imitar grep hasta cierto punto. De lo contrario, obtén cygwin como sugirió @DanielRHicks.
tumchaaditya
Estoy buscando "una función que viene con la línea de comandos".
Houseman

Respuestas:

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

Ejecutar ffmpeg en el archivo de entrada, envía la salida de stderr (donde ffmpeg escribe su información de manera predeterminada) a la salida estándar. Filtrar la lista con findstr para recuperar las líneas que comienzan con espacios seguidos de Duration:. Para cada línea encontrada, los espacios y las comas se consideran delimitadores de campo y se solicita el segundo token de la línea, es decir, el tiempo después de Duration: etiqueta. Este valor se recupera en el for parámetro reemplazable %a que se hace eco a la consola.

Para utilizar desde el archivo por lotes, escapar signos de porcentaje, reemplazando % con %%

MC ND
fuente
Creo que le falta un cierre 'at: (' findstr / r / c: "^ * Duration:"). Creo que debería ser ('findstr / r / c: "^ * Duration:"')
cliffclof
@cliffclof, por supuesto que tienes razón. Respuesta actualizada, gracias
MC ND
1

Si no se opone al uso de Powershell (viene de serie en versiones recientes de Windows), puede hacer uso del Select-String mando.

Aquí hay una gran publicación de otra pregunta de Superusuario: enlazar

Básicamente, puede tomar la salida del comando y canalizar los resultados a cadena de selección.

Kris Powell
fuente