programa por parametros para lotes ejemplos ejecutar desde crear con comandos bat avanzados archivos archivo c#-2.0 external-process batch-file

c#-2.0 - por - ejecutar.bat con parametros desde c#



¿Cómo ejecutar un archivo.bat desde una aplicación de formulario de Windows C? (2)

Para el problema que tiene sobre el archivo de proceso por lotes que le pregunta al usuario si el destino es una carpeta o un archivo, si conoce la respuesta por adelantado, puede hacerlo así:

Si el destino es un archivo: echo f | [ruta del archivo por lotes]

Si carpeta: echo d | [ruta del archivo por lotes]

Básicamente, simplemente pasará la letra después de "echo" a la entrada del archivo por lotes.

Lo que tengo que hacer es hacer que una aplicación GUI C # 2005 llame a .bat y varios archivos VBScript a petición del usuario. Esta es solo una solución provisional hasta el final de las vacaciones y puedo escribirlo todo en C #. Puedo hacer que los archivos de VBScript se ejecuten sin problemas, pero no puedo ejecutar el archivo .bat. Cuando hago clic en la aplicación C # para ejecutar el archivo .bat, se abre una ventana de DOS y se cierra muy rápido y el archivo .bat de prueba no se ejecuta: "Windows no reconoce el bate como un comando interno o externo" es el error devuelto en el cuadro de DOS. Si simplemente hago doble clic en el archivo .bat o lo ejecuto manualmente desde el símbolo del sistema, se ejecuta. También necesito que el archivo .bat se ejecute silenciosamente a menos que se requiera una interacción del usuario: este script copia 11k + archivos en carpetas en una máquina en red y ocasionalmente Windows "olvida" si el destino es un archivo o directorio y pide que el usuario lo diga de qué se trata (este es un tema completamente diferente que no se debate aquí ... no hace falta decir que me molesta).

Hasta ahora en mi fuente de C # tengo esto:

Process scriptProc = new Process(); if (File.Exists("c://scripts//batchfile1.bat")) { scriptProc.StartInfo.FileName = @"cscript"; scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C://scripts//batchfile1.bat"); // Wacky psuedo code // scriptProc.Start(); scriptProc.WaitForExit(1500000); scriptProc.Close(); } if (!File.Exists("c://scripts//batchfile1.bat")) { }

Soy consciente de que este código no funciona, pero es esencialmente lo que quiero que haga. Lo que estoy viendo es algo como esto para los archivos .bat. Supongo que tengo que decirle al sistema que use cmd para ejecutar el .bat. No sé cómo hacer esto. He revisado este sitio que es para C # 2003. No me sirve de mucha ayuda ya que estoy muy verde con C #.

EDITAR: Usando la publicación de Kevin lo intenté de nuevo. La misma secuencia de comandos de solución de esa publicación, pero modificada para mí, ya que no necesito redireccionar:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "C://scripts//batchfile1.bat"; proc.StartInfo.RedirectStandardError = false; proc.StartInfo.RedirectStandardOutput = false; proc.StartInfo.UseShellExecute = false; proc.Start(); proc.WaitForExit();