Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: ssmateos en 2 Marzo 2016, 08:19 am



Título: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 08:19 am
Buenos días!
tengo un .bet,  ff-prompt.bat, en el que ejecuto la línea de código "ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi" y me convierte el "wildlife.wmv a avi, pero lo que entendí e hice en código no hace absolutamente nada:

Código
  1. ProcessStartInfo startInfo = new ProcessStartInfo("D:\\..\\ffmpeg\\ff-prompt.bat");
  2.            startInfo.WindowStyle = ProcessWindowStyle.Minimized;
  3.            startInfo.UseShellExecute = false;
  4.            startInfo.RedirectStandardInput = true;
  5.  
  6.            startInfo.Arguments = "ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi";
  7.  
  8.            Process.Start(startInfo);

alguien sabe por qué??? hay forma de hacerlo???

Mil gracias de antemano! Soy nueva con estas cosas!


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Meta en 2 Marzo 2016, 08:22 am
Hola:

Hay respuestas por aquí (https://social.msdn.microsoft.com/Forums/es-ES/8e6e2717-5919-4623-a4d3-e2018fec240f/abrir-bat-y-ejecutar-un-comando-desde-c?forum=vcses).

Un cordial saludo.


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 09:08 am
pues el caso es que lo pregunté yo misma y no me quedó nada claro, así que seguí intentándolo aquí!

:) pero gracias por hacerme caso igualmente...ya no sé donde mirar!


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Meta en 2 Marzo 2016, 10:13 am
Hola:

¿Exactamente que hace lo que buscas?

Puedes traducir del bat a C# para que haga lo mismo.

Saludos.


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 10:31 am
Hola,
es un bat que descargué para convertir videos, y ejecuta un exe que tiene en la carpeta bin, el ffmpeg.exe, pasándole los argumentos que puse (-i -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi) pero probé con el process y no debo hacerlo bien, se abre prompt una decima de seg pero no hace nada.  esto es el bat:
Código
  1. @ECHO OFF
  2. REM FF Prompt 1.2
  3. REM Open a command prompt to run ffmpeg/ffplay/ffprobe
  4. REM Copyright (C) 2013-2015  Kyle Schwarz
  5.  
  6. TITLE FF Prompt
  7.  
  8. IF NOT EXIST bin\ffmpeg.exe (
  9.  CLS
  10.  ECHO bin\ffmpeg.exe could not be found.
  11.  GOTO:error
  12. )
  13.  
  14. CD bin || GOTO:error
  15. PROMPT $P$_$G
  16. SET PATH=%CD%;%PATH%
  17. CLS
  18. ffmpeg -version
  19. ECHO For help run: ffmpeg -h
  20. ECHO For formats run: ffmpeg -formats ^| more
  21. ECHO For codecs run: ffmpeg -codecs ^| more
  22. ECHO Current directory is now: "%CD%"
  23. ECHO The bin directory has been added to PATH
  24.  
  25. CMD /Q /K
  26. GOTO:EOF
  27.  
  28. :error
  29. ECHO Press any key to exit.
  30. GOTO:EOF


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Slava_TZD en 2 Marzo 2016, 11:51 am
Código
  1. var startInfo = new ProcessStartInfo {
  2. FileName = @"ff-prompt.bat",
  3. RedirectStandardInput = true,
  4. UseShellExecute = false,
  5. CreateNoWindow = false
  6. };
  7. var proc = new Process { StartInfo = startInfo };
  8. proc.Start ();
  9. proc.StandardInput.WriteLine (@"ffmpeg blablabalablabal");
  10. //proc.StandardInput.WriteLine ("exit");
  11. proc.WaitForExit ();


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Eleкtro en 2 Marzo 2016, 11:54 am
El script de batch que has mostrado de por si no hace absolutamente nada, simplemente comprueba si existe el ffmpeg, muestra la version, y por último abre una nueva instancia de la CMD... ¿te ha faltado algo por copiar?.

No le puedes pretender pasar argumentos a un script que no toma ningún argumento, tan simple como eso, eso sería el problema, ahora bien, no necesitas usar un script de Batch desde un lenguaje como C#, puedes utilizar la Class Process para iniciar el proceso FFMPEG directamente pasándole los argumentos que desees:

Código
  1. Process p = new Process();
  2.  
  3. p.StartInfo.FileName = "...\\FFMPEG.exe";
  4. p.StartInfo.Arguments = "-i \"Wildlife.wmv\" -qscale 4 -vcodec mjpeg -acodec pcm_s16le \"salida.avi\"";
  5.  
  6. p.Start();
  7. p.WaitForExit();

EDITO: Ah, creo que lo entendí mal, ¿lo que querías era escribir el input directamente en la instancia de la CMD que abre el script de Batch?, en ese caso la solución de @Slava_TZD te debería servir, la mia es para iniciar directamente el proceso FFMPEG con los argumentos.

Saludos!


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 11:55 am
voy a probar! mil gracias, que majos madre!  ;-) ;-) ;-)


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Meta en 2 Marzo 2016, 12:01 pm
voy a probar! mil gracias, que majos madre!  ;-) ;-) ;-)

Después de tanto sufrimiento que te vi en los foros de MSDN te veo contento. Nos avisa si te ha funcionado.

Leí hace tiempo que la competencia del .bat de CMD es el .vbs Visual Basic Script, luego hay otros más y el más que usan ahora en empresas es el F#. Aquí (https://es.answers.yahoo.com/question/index?qid=20110125194339AAqqsrO) encontré una respuesta que hicieron hace tiempo.

Nos avisa y nos muestra tu resultado.

Suerte...


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 12:15 pm
 :-( :-( :-(

que desesperacion, se ejecuta pero no hace absolutamente nada....


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Meta en 2 Marzo 2016, 12:43 pm
Lo que intentas hace es lo que hace .bat pasarlo a C#?????


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 12:48 pm
Intenté con vuestras dos respuestas, y lo mismo en ambas...sale fugazmente el prompt pero no hace nada, de hecho si lo hago a mano tarda unos segundos en convertirlo.

Que se me está pasando???? Voy a empezar a soñar con esto! jajaja

Mil gracias por la ayuda, la desesperación compartida es más llevadera


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Slava_TZD en 2 Marzo 2016, 13:07 pm
Si no pegas el código es imposible ver el error.


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 13:12 pm
claro, disculpa!!! yo lo pego pero es básicamente lo que me aconsejásteis, soy una novata con estas cosas, lo que hice siempre fue en kentico que no va a tan bajo nivel!:


        private void btnconvertir_Click(object sender, EventArgs e)
        {
            //Process p = new Process();

            //p.StartInfo.FileName = "D:\\Users\\sara.sanchez\\Desktop\\pruebasAntonio\\ffmpeg\\bin\\FFMPEG.exe";
            //p.StartInfo.Arguments = "-i \"Wildlife.wmv\" -qscale 4 -vcodec mjpeg -acodec pcm_s16le \"salida.avi\"";
            ////ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi"
            //p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
            //p.StartInfo.UseShellExecute = false;
            //p.StartInfo.RedirectStandardInput = true;
            //p.Start();
            //p.WaitForExit();

            var startInfo = new ProcessStartInfo
            {
                FileName = @"D:\\Users\\sara.sanchez\\Desktop\\pruebasAntonio\\ffmpeg\\ff-prompt.bat",
                RedirectStandardInput = true,
                UseShellExecute = false,
                CreateNoWindow = false
            };
            var proc = new Process { StartInfo = startInfo };
            proc.Start();
            proc.StandardInput.WriteLine(@"ffmpeg -i Wildlife.wmv -qscale 4 -vcodec mjpeg -acodec pcm_s16le salida.avi");
                   
            proc.WaitForExit();
        }

probé tanto lo comentado como lo que no, e igual...


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: Slava_TZD en 2 Marzo 2016, 13:31 pm
@"C:\asd" = "C:\\asd" String literals (https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx)

Para que el ejemplo funcione sin estar en el mismo directorio, aparte de corregir lo anterior en tu código tienes que modificar el .bat, concretamente estas líneas IF NOT EXIST bin\ffmpeg.exe, CD bin y poner el path completo.

Código
  1. FileName = @"C:\path\to\ff-prompt.bat"
Código
  1. IF NOT EXIST C:\path\to\bin\ffmpeg.exe
Código
  1. CD C:\path\to\bin


Título: Re: Alguien me puede ayudar?Necesito ejecutar desde c# un .bat y pasarle una línea d
Publicado por: ssmateos en 2 Marzo 2016, 13:55 pm
Nada, quité la @ del argumento y modifiqué el .bat con la ruta completa y nada...