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

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

@echo off
ROBOCOPY c:\a c:\d /MIR /LOG:c:\d\log1.txt
if %ERRORLEVEL% GEQ 8 echo error encountered errorlevel:%errorlevel% & goto throw
ROBOCOPY c:\b c:\c /MIR /LOG:c:\c\log2.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\testrobocopy.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

  

最新文章

  1. ESET使用
  2. 【Visual Lisp】Visual Lisp属性与方法
  3. PYTHON对文件及文件夹的一些操作
  4. 用HTML代码加载Unity内容(unity频道:http://unity3d.9ria.com/)
  5. mvc之验证IEnumerable<T> 类型
  6. Eclipse上GIT插件EGIT使用手册ᄃ
  7. [RM 状态机详解3]RMContainer状态机详解
  8. 制造测试数据的程序及对拍程序概述(Like CyaRon)
  9. 老男孩Python九期全栈学习笔记3
  10. leecode第二天-使用异或找出数组中的非重复元素
  11. Java+selenium chrome 常见的问题WebDriverException: unknown error: call function result missing 'value'
  12. CentOS下挂载数据盘
  13. SpringMVC学习二
  14. MySQL:基础知识
  15. 安装memcache集群管理工具
  16. Linux惊群效应详解
  17. PHP开发APP接口实现--基本篇
  18. Python核心编程的四大神兽:迭代器、生成器、闭包以及装饰器
  19. eclipse配置汇总
  20. OC - 缓存 - NSCache - 介绍

热门文章

  1. 【原创】大数据量时生成DataFrame避免使用效率低的append方法
  2. 数据库引擎InnoDB和myisam的区别和联系
  3. python虚拟环境 virtualenv工具
  4. SQL初次接触
  5. May I see you again?【我可以再见到你吗?】
  6. 动态规划:最长上升子序列之基础(经典算法 n^2)
  7. IQueryable与IEnumerable区别
  8. sql中比较大小
  9. 【NopCommerce 3.1】asp.net mvc 利用jQuery from.js上传用户头像
  10. js基础之javascript函数定义及种类-普通涵数-自执行函数-匿名函数