所以我有一个接近完成的程序。基本上我打算用它做的是使用 Windows 任务调度程序在很晚的某个时间调用它来自动转换,使用 HandBrake CLI 工具,我的同事转储到源文件夹中的一些文件。
我试图让我的程序在foreach
循环中一次只转换一个程序,但是如果我使用process.WaitForExit();
该程序在找到并转换第一个文件后无限期挂起。每当我调试我的程序cmd
时,无论出于何种原因,我都会弹出 2 个弹出窗口……一个是cmd
运行在 中找到的命令的实际提示,string command;
另一个是debug/bin
在My Documents
. 转换第一个文件后,运行命令和转换的实际命令窗口确实关闭,但是我后面有一个弹出窗口保持打开状态
file:///c:/users/cbruce/documents/visual studio 2012/Projects/auto_convert_handbrake/auto_convert_handbrake/bin/Debug/auto_convert_handbrake.exe
如果我删除process.WaitForExit();
,那么我的程序将开始转换源文件夹中的每个文件,这没问题,但不太理想。这是我的代码。
namespace auto_convert_handbrake
{
class Program
{
static void Main(string[] args)
{
string filesToBeConverted = @".*.avi";
string outputFile;
string convertedDestination = @"D:\ShareStream_Conversions\_finished_conversions\";
var matches = Directory.GetFiles(@"D:\ShareStream_Conversions\_.to_be_converted\").Where(path => Regex.Match(path, filesToBeConverted).Success);
foreach (string file in matches)
{
string cutPath = file.Replace(@"D:\ShareStream_Conversions\_.to_be_converted\", @"");
outputFile = Regex.Replace(cutPath, ".avi", ".mp4");
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
string command = @"start D:\ShareStream_Conversions\HandBrakeCLI -i " + file + " -o " + convertedDestination + outputFile;
startInfo.Arguments = "/user:Administrator \"cmd /K " + command + "\"";
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
}
}
}
}
我希望程序一次只转换一个文件,并在移动到下一个之前自动退出其进程的当前实例match
。感谢您的任何意见和建议。