Autor
|
Tema: (SOLUCIONADO) [ BATCH ] Ayuda con "findstr"... y contador (Leído 14,750 veces)
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Hola, hago este tema aparte porque lo veo distinto, espero que sea lo correcto... Bueno, el problema es que, a ver... si yo ejecuto este comando: se me muestra esta información: Yo quiero buscar distintas "frases" ahi dentro como " 320.0 kbit" "1 92.0 kbit" o " 224.0 kbit", con findstr, así que para buscar 320.0 kbit hago esto: mplayer "%%a" -frames 0 | findstr /c:"320.0 kbit" Pero claro, para buscar todas las frases al mismo tiempo no se hacerlo, porque no las puedo separar con comillas en findstr... ___________________________________________________________________________________________________________ | EDITO: Ya he aprendido a separar las busquedas, lo estaba haciendo muy mal, tenía que usar comodines y espacios, pero ahora el problema cambia, necesito hacerlo de un modo distinto, tengo que crear un contador dentro de este comando: for /f "tokens=*" %%a in ('dir /B *.mp3') do set nombre="%%a" & mediainfo "%%a" | findstr Bit.rate.........................:.320.Kbps >null & call :error El contador debe sumar el valor de findstr (el numero) desde 161 hasta 320, y comrobarlos todos Ejemplo: | findstr 161.kbps >null & call :error | findstr 162.kbps >null & call :error | findstr 163.kbps >null & call :error | findstr ... | findstr 320.kbps >null & call :error como leches se hace eso? xDDD
|
|
« Última modificación: 19 Marzo 2011, 13:23 pm por pitoloko »
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
No te he entendido, por favor, pon un ejemplo.
No puedes buscar "varias" palabras, debes buscar una por una, fijate en la ayuda del findstr, habla solo de una cadena.
|
|
|
En línea
|
|
|
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Vale, a ver si esta vez se me entiende xD alargaré un poco la explicación: Con el comando " mediainfo "%%a"" recibo esta información: En esa información, el valor del bit rate (el numero) puede cambiar, ahí en la imagen el número es 320,vale, yo lo que necesito es que findstr busque todos los posibles numeros desde el 161 hasta el 320, osea: 161 162 163 ... 319 320 Y si encuentra alguno de esos numeros, entonces asignarle una función a realizar. Esto es posible hacerlo de un modo muy "patata" por ejemplo así mediainfo "%%a" | findstr 161.kbps 162.kbps 163.kbps (Y así hasta completar los números hasta el 320) Pero es una taréa muy tediosa, luego necesitaré aumentar el número final hasta el 1124 en otro comando diferente, no puedo escribir mil veces a mano el número... y sé que esta faena se podría hacer insertando un contador de numeros que vaya probando findstr desde el 161 hasta el 320 en o hasta el que yo le diga. El contador habría que insertarlo dentro del FOR, supongo. Leo, me he leido bien como usar el findstr, no quiero reectificarte, sé que sabes muchisimo pero me parece que estás equivocado en lo que has dicho porque yo si que puedo buscar varías palabras a la vez... Usando findstr el punto . se usa como comodín para cualquier caracter, y el espacio para separar palabras/frases que se quieran buscar, esto me permite una busqueda de multiples frases a la vez (al menos a mi si :S) Espero que ya hayas podido entender mi problema bien está vez, gracias por todo!
|
|
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Tú lo que estás buscando es una expresión regular. Investiga sobre eso. Mira, yo no tengo el comando mediainfo así que si pudieras decirme de donde lo descargo o como lo instalo. Pero bueno, lo analizaremos con un archivo de texto (er.txt): C:\>type er.txt Audio : algoooo Format : OK Format version : OK 2 Bit rate : 320 Kbps lkjasd asd asd f gdfgdfg 345edfgf dfg C:\> Yo quiero buscar la cadeba Bit rate, y obtener los números, bueno: type er.txt | findstr /r "^Bit rate" Si quieres los trozos o tokens usas FOR /F.
|
|
|
En línea
|
|
|
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Ok,ya imaginaba yo que el que estaba equivocado no eras tu xD Perdon, Bueno el mediainfo es un programa, se descarga aqui: http://mediainfo.sourceforge.net/es/Download/Windows(La versión CLI para usarla por CMD) Ahora, con lo que me has dicho, supongo que lo que debo hacer es cortar el "trozo" para mostrar lo que me interesa, a ver, intento esto: for /f "tokens=*" %%a in (' dir /B *.mp3' ) do mediainfo " %%a" | findstr /r " ^Bit rate" >prueba.txt
Pero el mediainfo me proporciona varías lineas que contienen "Bit rate", asi que en el texto queda esto: Overall bit rate : 320 Kbps Bit rate mode : Constant Bit rate : 320 Kbps Sampling rate : 44.1 KHz:/
|
|
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Mmmm, ya decía yo que el findstr era una ***** para las expresiones regulares. Prueba con: ... | findstr "^Bit rate" ... | findstr /b "Bit rate" ... | findstr /r "Bit rate" ... | findstr /r "^\<Bit rate"
|
|
|
En línea
|
|
|
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Porfavor, mirate este código cuando tengas un rato, está mal echo pero se entiende mi mala idea de lo que quiero hacer y quizás sea más fácil asi, pero no se como hacerlo bien para repetir "findstr" con cada numero de "%rate%: @echo off Set rate=161
for /f "tokens=*" %%a in ('dir /B *.mp3') do mediainfo "%%a" | findstr Bit.rate.........................:.%rate%.Kbps & call :convertir
:Find Rate set /a rate+=1 if %rate%=320 pause goto :eof
:Convertir IF %ERRORLEVEL% LEQ 0 echo+ %nombre% >> %lista% & coreconverter.exe -infile=%nombre% -outfile=%nombre% -convert_to="mp3 (Lame)" -b 160 --cbr -q 0 -noidtag
|
|
« Última modificación: 16 Marzo 2011, 23:47 pm por pitoloko »
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Al menos ya he resuelto una parte del problema: mediainfo "%%a" "--Inform=General;%BitRate%" Ese comando me devuelve un número, NADA MÁS... asi puedo usar findstr más comodamente (Aunque yo sigo igual XD) _________________________________________________________________________ EDITO:Bueno, el código ya va creciendo mucho y me surge una duda importante para que funcione bien... Fijarse en la cádena "CALL", para acabar su función sin que luego haga el " pause" ¿lo he puesto correctamente? me refiero al " & goto :eof", es que en algunos códigos he visto que se hace así: || (Goto :eof) y no puedo comprobarlo del todo bien yo mismo :/... Call :M4A
:M4A IF %ERRORLEVEL% LEQ 0 coreconverter.exe -infile="%nombre:~0,-5%.m4a" -outfile="%nombre:~0,-5%.mp3" -convert_to="mp3 (Lame)" -b 160 --cbr -q 0 -noidtag & del /q "%nombre%" & goto :eof
pause
|
|
« Última modificación: 17 Marzo 2011, 09:19 am por pitoloko »
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
SuperDraco
Desconectado
Mensajes: 2.505
Crew Dragon
|
Al final me he decantado por usar findstr de esta manera: Mediainfo "1.mp3" "--Inform=General;%BitRate%" | findstr "161... 162... 163... 164... 165... 166... 167... 168... 169... 17.... 18.... 19.... 2..... 3....." >nul Recordemos que mi proposito es buscar los bitrates mayores de 160000... Si tengo un mp3 de un bitrate de 320 kbps, el comando del mediainfo me devuelve este numero: 320000Entonces de la forma que uso findstr: findstr "3....." Estaría buscando (En mi caso) cualquier número superior al 300000Osea, Busca que el primer digito sea el 3, y el resto puede ser cualquiera. ¿Me equivoco? Parece que no me da fallos, lo he probado con todos los bitrates de mis MP3 en distintas maneras y el comando parece que no se equivoca, pero necesito estar seguro antes de probarlo a la ligera y que me destruya mi coleccion de mp3 xD... Leo espero tu respuesta para que me digas si estoy usando findstr bien aunque no sea la forma más correcta de usarlo, muchas gracias, o quien pueda sacarme de dudas PD: Aun estoy con la duda del "goto :eof" xD Y otra cosa, cuando termine mi batch, me gustaría postearlo, puedo hacerlo en esta sección, la de scripting? Saludos!
|
|
« Última modificación: 18 Marzo 2011, 05:50 am por pitoloko »
|
En línea
|
No he vuelto, solo estoy de paso.
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Okay, son las 1:17 am, mañana checo tu duda.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] modificar "start page" en "internet explorer" con "batch"
Scripting
|
taton
|
7
|
17,378
|
20 Septiembre 2006, 01:45 am
por taton
|
|
|
Batch que busque y elimine ".log" anteriores a una fecha? (SOLUCIONADO)
Scripting
|
SuperDraco
|
3
|
6,935
|
12 Noviembre 2009, 02:29 am
por flony
|
|
|
[BATCH] Como desinstalo un evento del sistema con "wevtutil.exe"? (SOLUCIONADO)
Scripting
|
SuperDraco
|
9
|
9,519
|
30 Noviembre 2009, 16:30 pm
por SuperDraco
|
|
|
[BATCH] Ayuda con este script sobre "if exist" y "takeown" (SOLUCIONADO)
Scripting
|
SuperDraco
|
4
|
12,486
|
30 Noviembre 2009, 21:05 pm
por Angel Doze
|
|
|
(Solucionado)[BATCH] Como delimitar con un "FOR" las extensiones de los nombres
Scripting
|
SuperDraco
|
2
|
3,567
|
23 Enero 2011, 04:26 am
por SuperDraco
|
|