Это происходит потому, что> не является частью аргументов команды, а является стандартным операндом перенаправления вывода, который обрабатывается не самим процессом, а ОС, запускающей процесс.
При запуске процесса с помощью кода нам нужно разобраться с этим самим.
Вот решение, работающее с windows:
var cmd = "diff"; //if ran under windows is the choco path: C:\\ProgramData\\chocolatey\\bin\\diff.exe
var args = "--unchanged-group-format=\"\" --old-group-format=\"\" --changed-group-format=\"%>\" --new-group-format=\"\" old.txt new.txt";
var p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = cmd;
p.StartInfo.Arguments = args;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
using (var outputFile = File.OpenWrite("diff.txt"))
{
p.StandardOutput.BaseStream.CopyTo(outputFile);
}
p.WaitForExit();
РЕДАКТИРОВАТЬ 1:
Наличие этих двух файлов (старых. txt и new.txt)
old.txt new.txt
Line 1 - abc Line 1 - def
Line 2 - def Line 2 - def
Line 1 - abc Line 1 - def
Line 2 - def Line 2 - def
Вывод (diff.txt) выглядит следующим образом:
Line 1 - def
Line 1 - def
Line 1 - def
Line 1 - def