だから私は完成に近づいているプログラムを持っています。基本的に私が計画しているのは、Windows タスク スケジューラを使用して非常に深夜に特定の時間に呼び出し、HandBrake CLI ツールを使用して、同僚がソース フォルダーにダンプしたいくつかのファイルを自動変換することです。
foreach
ループ内で一度に 1 つのプログラムのみを変換するようにプログラムを取得しようとしていますが、プログラムを使用process.WaitForExit();
すると、最初のファイルを見つけて変換した後、プログラムが無期限にハングします。プログラムをデバッグするたびにcmd
、何らかの理由で 2 つのポップアップが表示されます。1 つは にcmd
あるコマンドを実行している実際のプロンプトで、もう 1 つは のフォルダ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();
}
}
}
}
プログラムで一度に 1 つのファイルのみを変換し、そのプロセスの現在のインスタンスを自動的に終了してから、次のファイルに移動するようにしmatch
ます。ご意見やご提案をありがとうございます。