通过 Window 的应用程序报告 Robocopy 成功/失败

Posted

技术标签:

【中文标题】通过 Window 的应用程序报告 Robocopy 成功/失败【英文标题】:Robocopy Success/Failure reported via Window's application 【发布时间】:2014-03-10 16:18:40 【问题描述】:

提前感谢您的宝贵时间。

我正在开发一个应用程序来自动化我每天必须检查的一些事情。

其中之一是确保我们所有的每日 Robocopies 都成功进行。

我在找出将其传达给我的程序的最佳方式时遇到了问题。我已经查看了 Robocopy 使用的各种退出代码,这些代码非常有用,但是无论如何都可以将其输出到文件中,并且无论如何都知道它与哪个备份相关联?

抱歉,如果这含糊不清,请让我知道任何其他可能有用的信息。

谢谢, 会

【问题讨论】:

【参考方案1】:

如果您从应用程序启动 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

【讨论】:

副本实际上是在单独的服务器上完成的,我想我在通过这个应用程序远程运行进程时会遇到问题。 如果您的应用程序以具有该服务器权限的域用户身份运行,您应该仍然可以这样做。 啊,太好了。我明天回去工作时会研究这个!谢谢。【参考方案2】:

您可以将 Robocopy 输出写入文件并读入,例如

robocopy c:\Test\ c:\temp /LOG+:myLogFile

然后尝试使用日志选项以获得有用的详细信息(请参阅http://ss64.com/nt/robocopy.html

【讨论】:

您好,感谢您的回复。为了澄清一下,我们目前将所有日志输出到文件中。从这些文件中读取的问题在于它以一种不容易解析和获取所需信息的方式输出错误。可能有一些日志记录选项可以缓解这个问题,所以我会研究一下。再次感谢。 可能是/NP /NS /NC /NDL /NJH /NJS /FP【参考方案3】:

你可以这样做:

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);

【讨论】:

【参考方案4】:

像这样创建一个 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”中拥有了整个日志。如果您想找出问题所在,这很有用。

【讨论】:

以上是关于通过 Window 的应用程序报告 Robocopy 成功/失败的主要内容,如果未能解决你的问题,请参考以下文章

poj 2585 Window Pains 解题报告

题解报告:poj 2823 Sliding Window(单调队列)

window下jenkins自动化持续集成报告查看配置,基于python语言

[转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃

Javascript - 通过 s-s-rS 2008 R2 调用时,window.open 在 IE 中不起作用

如何让 Bamboo 文物收集整个文件夹?