C# 动态执行一系列控制台命令,并允许实时显示出来执行结果时,可以使用下面的函数。可以达到的效果为:

  • 持续的输入:控制台可以持续使用输入流写入后续的命令
  • 大数据量的输出:不会因为大数据量的输出导致程序阻塞
  • 友好的 API:直接输入需要执行的命令字符串即可

函数原型为:

/// <summary>
/// 打开控制台执行拼接完成的批处理命令字符串
/// </summary>
/// <param name="inputAction">需要执行的命令委托方法:每次调用 <paramref name="inputAction"/> 中的参数都会执行一次</param>
private static void ExecBatCommand(Action<Action<string>> inputAction)

使用示例如下:

ExecBatCommand(p =>
{p(@"net use \\10.32.11.21\ERPProject yintai@123 /user:yt\ERPDeployer");// 这里连续写入的命令将依次在控制台窗口中得到体现p("exit 0");
});

注:执行完需要的命令后,最后需要调用 exit 命令退出控制台。这样做的目的是可以持续输入命令,知道用户执行退出命令 exit 0,而且退出命令必须是最后一条命令,否则程序会发生异常。


下面是批处理执行函数源码:

/// <summary>
/// 打开控制台执行拼接完成的批处理命令字符串
/// </summary>
/// <param name="inputAction">需要执行的命令委托方法:每次调用 <paramref name="inputAction"/> 中的参数都会执行一次</param>
private static void ExecBatCommand(Action<Action<string>> inputAction)
{Process pro = null;StreamWriter sIn = null;StreamReader sOut = null;try{pro = new Process();pro.StartInfo.FileName = "cmd.exe";pro.StartInfo.UseShellExecute = false;pro.StartInfo.CreateNoWindow = true;pro.StartInfo.RedirectStandardInput = true;pro.StartInfo.RedirectStandardOutput = true;pro.StartInfo.RedirectStandardError = true;pro.OutputDataReceived += (sender, e) => Console.WriteLine(e.Data);pro.ErrorDataReceived += (sender, e) => Console.WriteLine(e.Data);pro.Start();sIn = pro.StandardInput;sIn.AutoFlush = true;pro.BeginOutputReadLine();inputAction(value => sIn.WriteLine(value));pro.WaitForExit();}finally{if (pro != null && !pro.HasExited)pro.Kill();if (sIn != null)sIn.Close();if (sOut != null)sOut.Close();if (pro != null)pro.Close();}
}

转载于:https://www.cnblogs.com/lenic/p/4097045.html

C# 动态执行批处理命令相关推荐

  1. 用CreateProcess()在MFC中执行批处理命令

    //封装CreateProcess BOOL CFXNAdhocDemoDlg::ProcessCmd(LPTSTR cmd) {     ASSERT(cmd!=NULL); STARTUPINFO ...

  2. WinExec执行批处理命令

    procedure deleteDirtyRz; varstr: string; beginstr:= 'del '+appPath+'USedLog\*.log';WinExec(PChar('cm ...

  3. 如何终止一个正在动态执行的命令

    比如,我们在终端输入了top 那么它就会一直动态的运行下去. 我们怎样让它终止呢? 很简单,Ctrl +C就可以了. 另外,还有一种方法, 直接按一下q也可以退出. 它们两个的效果是一样的. 转载于: ...

  4. 服务器bat脚本删除空文件夹,windows批处理命令(1)——右键清理空文件夹

    日常学习工作免不了使用电脑,而作为一个强迫症,看到电脑中有空文件及其不爽: 再加上使用一些Git工具时含空文件不允许提交,因此就寻思着可不可以写一个脚本直接一键清理空文件夹. 最终实现的效果如下: 最 ...

  5. Delphi常用批处理命令

    # getconf LONG_BIT 32 (说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit) # cat /proc/cpuinfo | grep flags | grep ...

  6. DOS批处理命令-if语句

    IF语句是批处理中执行的条件分歧处理. 批处理中,IF分歧的写法有好几种,接下来,我们来一个一个的分析IF语法的结构. 1.IF [NOT] ERRORLEVEL 番号 批处理命令 当ERRORLEV ...

  7. 批处理命令无法连续执行

    如题,博主一开始的批处理命令是这样的: cd node_modules cd heapdump node-gyp rebuild cd .. cd v8-profiler-node8 node-pre ...

  8. 利用批处理命令执行.jar文件

    利用批处理命令执行.jar文件 1.创建.jar文件(此处为一个java项目,主函数里只有一条语句System.out.println("请输入一个字符串:");) 2.创建批处理 ...

  9. 如何自动执行多个批处理命令

    2019独角兽企业重金招聘Python工程师标准>>> 1.要执行的批处理命令在D盘的一个目录(如:批处理文件)中, 分别是:1 .bat.2.bat.3.bat.4.bat. 2. ...

最新文章

  1. tiny210V2 Uboot kernel filesystem 烧写和启动
  2. 【直播讲座】用友摩天联合光环国际,听国学学项目管理
  3. windwows和linux下,mysql密码的破解
  4. 美团flutter_Flutter包大小治理上的探索与实践
  5. 2021甘肃平凉高考成绩查询,甘肃省教育考试院:2021年甘肃高考查分入口、查分系统...
  6. oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
  7. JDK5新特性之一----静态导入
  8. 椭圆曲线数字签名算法
  9. 小程序页面跳转的几种方式
  10. pyqt项目——测温仪数据采集软件
  11. 我为JNCIE狂——Juniper认证成长之路
  12. ibm aix_IBM AIX设备驱动程序开发
  13. 关于网易云音乐的一些感想
  14. SASS _ 入门版
  15. 四川省建设厅关于推行建筑工人实名制管理工作的通知〔2018〕613号
  16. 开咖啡店会遇到的哪些问题?总结八大解决方法
  17. 数字孪生3D可视化技术重构和模拟再现工业建筑真实场景
  18. 一线城市初次租房防坑指南
  19. 得到课程:高效学习-脱不花
  20. 从苏宁电器到卡巴斯基(后传)第01篇:讲讲我写完那36篇故事之后的一些事

热门文章

  1. SDH/E1/T1/E3/T3/STM/TDM相关名词介绍
  2. 如何训练大学生的工程实战能力
  3. Cassandra使用 —— 一个气象站的例子
  4. 『ORACLE』 配置共享服务器(11g)
  5. 学习angularjs时遇到 XX is not a function
  6. [原创]一种自动地将继承自NSObject的自定义类序列化成JSON的方法
  7. 关于Android制作.9.png图片
  8. GreenDao 使用方法:
  9. Activity管理(二):adj内存管理机制
  10. Android AlarmManager 使用指南