我在 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/