【发布时间】:2014-03-10 16:18:40
【问题描述】:
提前感谢您的宝贵时间。
我正在开发一个应用程序来自动化我每天必须检查的一些事情。
其中之一是确保我们所有的每日 Robocopies 都成功进行。
我在找出将其传达给我的程序的最佳方式时遇到了问题。我已经查看了 Robocopy 使用的各种退出代码,这些代码非常有用,但是无论如何都可以将其输出到文件中,并且无论如何都知道它与哪个备份相关联?
抱歉,如果这含糊不清,请让我知道任何其他可能有用的信息。
谢谢, 会
【问题讨论】:
提前感谢您的宝贵时间。
我正在开发一个应用程序来自动化我每天必须检查的一些事情。
其中之一是确保我们所有的每日 Robocopies 都成功进行。
我在找出将其传达给我的程序的最佳方式时遇到了问题。我已经查看了 Robocopy 使用的各种退出代码,这些代码非常有用,但是无论如何都可以将其输出到文件中,并且无论如何都知道它与哪个备份相关联?
抱歉,如果这含糊不清,请让我知道任何其他可能有用的信息。
谢谢, 会
【问题讨论】:
如果您从应用程序启动 robocopy 进程,您可以从那里检查退出代码。
Process myProcess = null;
// Start the process.
myProcess = Process.Start("robocopy ....");
myProcess.WaitForExit(1000);
Console.WriteLine("Process exit code: {0}", myProcess.ExitCode);
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode(v=vs.110).aspx
【讨论】:
您可以将 Robocopy 输出写入文件并读入,例如
robocopy c:\Test\ c:\temp /LOG+:myLogFile
然后尝试使用日志选项以获得有用的详细信息(请参阅http://ss64.com/nt/robocopy.html)
【讨论】:
/NP /NS /NC /NDL /NJH /NJS /FP
你可以这样做:
public static void Main()
{
// Prepare the process.
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "robocopy.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "WHATEVER YOU NEED"
// Start process and wait for it to end
Process exeProcess = Process.Start(startInfo)
exeProcess.WaitForExit();
// Display what the exit code was
Console.WriteLine();
Console.WriteLine("Process exit code: {0}", exeProcess.ExitCode);
}
【讨论】:
像这样创建一个 Robocopy 流程:
string command = $"Robocopy {sourcePath} {targetPath} /MIR /w:1 /r:10";
var copyTask = new Process()
{
StartInfo = new ProcessStartInfo()
{
FileName = "CMD.exe"
Arguments = $"/c {command}",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
像这样使用它:
copyTask.Start()
string Output = copyTask.StandardOutput.ReadToEnd();
copyTask.WaitForExit();
现在您在“string output”中拥有了整个日志。如果您想找出问题所在,这很有用。
【讨论】: