zoukankan      html  css  js  c++  java
  • .bat 处理错误码

    某些命令只会返回error level,而要添加互操作性,.bat文件的返回值,exit code应该最后指定,那么需要,在这个单行的命令后面单个添加处理error level

     的语句,最后再做统一的抛出处理,一个robo copy,批量拷贝,很实用的例子,可以作为参考,以下命令通过测试

    @echo off
    ROBOCOPY c:a c:d /MIR /LOG:c:dlog1.txt
    if %ERRORLEVEL% GEQ 8 echo error encountered errorlevel:%errorlevel%  & goto throw
    ROBOCOPY c: c:c /MIR /LOG:c:clog2.txt
    :throw
    if %ERRORLEVEL% GEQ 16 echo ***FATAL ERROR*** & goto end
    if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
    if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
    if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
    if %ERRORLEVEL% EQU 8 echo FAIL & goto end
    if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
    if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
    if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
    if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
    if %ERRORLEVEL% EQU 2 echo XTRA & goto end
    if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
    if %ERRORLEVEL% EQU 0 echo No Change & goto end
    :end 
    if %ERRORLEVEL% GEQ 8 exit %ErrorLevel%
    exit 0
    

      robo copy命令的说明可以见网址:http://ss64.com/nt/robocopy-exit.html

    a sample call in c# with exitcode handling

    void Main()
    {
    
    Process processer = new Process();
                        processer.StartInfo.FileName = @"c:a	estrobocopy.bat";
                        processer.StartInfo.Arguments = null;
    
                        processer.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                        processer.StartInfo.RedirectStandardOutput = true;
                        processer.StartInfo.RedirectStandardError = true;
                        processer.StartInfo.UseShellExecute = false;
                        processer.StartInfo.CreateNoWindow = true;
                        processer.EnableRaisingEvents = true;
    
                        processer.OutputDataReceived += new DataReceivedEventHandler(OutputDataReceived);
                        processer.ErrorDataReceived += new DataReceivedEventHandler(ErrorDataReceived);
    
                        processer.Start();
                        processer.BeginOutputReadLine();
                        processer.BeginErrorReadLine();
    					processer.WaitForExit();
    					Console.WriteLine (processer.ExitCode);
    	//Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
    }
    
    private void ErrorDataReceived(object sendingProcess,
                DataReceivedEventArgs outLine)
            {
                if (!String.IsNullOrEmpty(outLine.Data))
                {
                    Console.WriteLine ("error:"+outLine.Data);
                }
            }
    private void OutputDataReceived(object sendingProcess,
                DataReceivedEventArgs outLine)
            {
                if (!String.IsNullOrEmpty(outLine.Data))
                {
                    Console.WriteLine ("output:"+outLine.Data);
                }
            }
    // Define other methods and classes here
    //call kernel32.dll method to invoke some process to complete our job and check results of the processor created jobs
    

      

  • 相关阅读:
    在spring boot中三分钟上手apache顶级分布式链路追踪系统skywalking
    Spring Boot Admin 2.1.0
    Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)
    Spring Cloud Sleuth + Zipkin 链路监控
    guava布隆过滤器
    红包算法
    java国际化之时区问题处理
    SpringCloud2.0 Hystrix Feign 基于Feign实现断路器
    SpringBoot 自定义线程池,多线程
    基于Redisson+SpringBoot的Redission分布式锁
  • 原文地址:https://www.cnblogs.com/hualiu0/p/5163744.html
Copyright © 2011-2022 走看看