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

标签 c# windows batch-file ffmpeg automation

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

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

C:apps\xyz\>process.bat "c:\files\uploads" "c:\files\output" "123"

这将创建 2 个文件:c:\files\output\abc.mp4 和 c:\files\output\123.jpg 使用 FFMPEG 如果我在命令提示符下运行,一切正常。

@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")

但我需要使这个过程自动化。所以我想要一个计划的作业或其他一些进程来定期或在有文件要处理时处理文件。

我想创建一个每 x 分钟运行一次的 C# 控制台应用程序。 控制台应用程序会将 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";
}

关于c# - 如何在 C# (MVC 3) 中自动运行带有 3 个参数的批处理命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21098597/

相关文章:

MySQL 服务器 - Sillenly 安装和配置

c# - 从 AddOrUpdate 检索 id

c# - 私有(private)服务器/客户端的自签名证书安全

c# - 从 Windows 窗体中删除控件并调整其他控件以适应

c - 在 Windows 中拦截库调用的最简单方法是什么?

windows - 在更改为cmd后的powershell中无法通过批处理脚本文件调用bat文件

c# - 在区域内的 View 中使用 MVC HtmlHelper 扩展方法

c++ - 使用 C++ 删除 WMI 实例

c++ - 在 Windows XP 上替换::SHCreateItemFromParsingName()

windows - 在 Windows 批处理文件中执行时脚本挂起