如何在C#(MVC 3)中自动运行带有3个参数的批处理命令?

如何在C#(MVC 3)中自动运行带有3个参数的批处理命令?,c#,windows,batch-file,ffmpeg,automation,C#,Windows,Batch File,Ffmpeg,Automation,我在process.bat文件中有这个命令 此文件接受3个参数-%1=输入文件路径%2=输出路径%3=输出文件名 以下是我在命令提示符中的调用方式: C:apps\xyz\>process.bat "c:\files\uploads" "c:\files\output" "123" 这将使用FFMPEG创建两个文件:c:\files\output\abc.mp4和c:\files\output\123.jpg 如果我在命令提示符下运行,一切正常 @echo off set w=480

我在process.bat文件中有这个命令 此文件接受3个参数-%1=输入文件路径%2=输出路径%3=输出文件名

以下是我在命令提示符中的调用方式:

C:apps\xyz\>process.bat "c:\files\uploads" "c:\files\output" "123"
这将使用FFMPEG创建两个文件:c:\files\output\abc.mp4和c:\files\output\123.jpg 如果我在命令提示符下运行,一切正常

@echo off 
set w=480 
set h=320 
for "%%a" in ("%1\*.avi") 
do (ffmpeg -i "%%a" -c:v libx264 -movflags +faststart -preset slow -crf 22 -b:v 500k -vf "scale=480:trunc(ow/a/2)*2" -threads 0 -c:a libfdk_aac -b:a 128k "%2/%%~na.mp4" -vf select="not(mod(n\\,10))" -r 1 -t 1 -ss 3 -s sqcif "%2\%3.jpg")
但我需要自动化这个过程。所以我想要一个计划的作业或其他进程,定期或在有文件要处理时处理文件

我想创建一个C#控制台应用程序,每x分钟运行一次。 控制台应用程序将把3参数传递给bat文件并运行它。 但我在控制台应用程序中遇到了噩梦。它就是不起作用。 我从未看到生成的文件或给出的任何错误

在windows操作系统(C#,MVC 3)中实现这种自动化的最佳实践是什么

以下是我尝试过但从未奏效的方法:

public static string RunBatchFile(string fullPathToBatch, string args) {            
    using (var proc = new Process {
        StartInfo =
        {                                        
            FileName = fullPathToBatch,
            Arguments = args,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = false,
            RedirectStandardError = false
        }
    })
    {
        try {
            proc.Start();
            proc.WaitForExit();                   
        } catch (Win32Exception e) {
            if (e.NativeErrorCode == 2)
                return "File not found exception";
            else if (e.NativeErrorCode == 5)
                return "Access Denied Exception";
        }
    }

    return "OK";
}

你很接近。WaitForExit仅在根据文档“无法访问等待设置”时抛出Win32Exception(不太确定这意味着什么)。您真正想要的是检查proc的ExitCode属性,如中所示:

switch(proc.ExitCode) {
  case 0:
    return "OK";
  case 2:
    return "File not found exception";
  case 5:
    return "Access Denied Exception";
  default:
    return "Unknown exception";
}

我试了好几个小时才让它工作。谢谢你的帮助。那你是怎么让它工作的呢?您应该提供答案,以便其他人能够受益。通过此控制台应用程序处理文件夹(使用FFMPEG处理)后,我无法从文件夹中删除该文件。它说文件仍在ffmpeg.exe中打开。我正在调用process.Close()和process.dispose()。如果我遗漏了什么,有什么线索吗?