C# 动态执行批处理命令
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# 动态执行批处理命令相关推荐
- 用CreateProcess()在MFC中执行批处理命令
//封装CreateProcess BOOL CFXNAdhocDemoDlg::ProcessCmd(LPTSTR cmd) { ASSERT(cmd!=NULL); STARTUPINFO ...
- WinExec执行批处理命令
procedure deleteDirtyRz; varstr: string; beginstr:= 'del '+appPath+'USedLog\*.log';WinExec(PChar('cm ...
- 如何终止一个正在动态执行的命令
比如,我们在终端输入了top 那么它就会一直动态的运行下去. 我们怎样让它终止呢? 很简单,Ctrl +C就可以了. 另外,还有一种方法, 直接按一下q也可以退出. 它们两个的效果是一样的. 转载于: ...
- 服务器bat脚本删除空文件夹,windows批处理命令(1)——右键清理空文件夹
日常学习工作免不了使用电脑,而作为一个强迫症,看到电脑中有空文件及其不爽: 再加上使用一些Git工具时含空文件不允许提交,因此就寻思着可不可以写一个脚本直接一键清理空文件夹. 最终实现的效果如下: 最 ...
- Delphi常用批处理命令
# getconf LONG_BIT 32 (说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit) # cat /proc/cpuinfo | grep flags | grep ...
- DOS批处理命令-if语句
IF语句是批处理中执行的条件分歧处理. 批处理中,IF分歧的写法有好几种,接下来,我们来一个一个的分析IF语法的结构. 1.IF [NOT] ERRORLEVEL 番号 批处理命令 当ERRORLEV ...
- 批处理命令无法连续执行
如题,博主一开始的批处理命令是这样的: cd node_modules cd heapdump node-gyp rebuild cd .. cd v8-profiler-node8 node-pre ...
- 利用批处理命令执行.jar文件
利用批处理命令执行.jar文件 1.创建.jar文件(此处为一个java项目,主函数里只有一条语句System.out.println("请输入一个字符串:");) 2.创建批处理 ...
- 如何自动执行多个批处理命令
2019独角兽企业重金招聘Python工程师标准>>> 1.要执行的批处理命令在D盘的一个目录(如:批处理文件)中, 分别是:1 .bat.2.bat.3.bat.4.bat. 2. ...
最新文章
- tiny210V2 Uboot kernel filesystem 烧写和启动
- 【直播讲座】用友摩天联合光环国际,听国学学项目管理
- windwows和linux下,mysql密码的破解
- 美团flutter_Flutter包大小治理上的探索与实践
- 2021甘肃平凉高考成绩查询,甘肃省教育考试院:2021年甘肃高考查分入口、查分系统...
- oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
- JDK5新特性之一----静态导入
- 椭圆曲线数字签名算法
- 小程序页面跳转的几种方式
- pyqt项目——测温仪数据采集软件
- 我为JNCIE狂——Juniper认证成长之路
- ibm aix_IBM AIX设备驱动程序开发
- 关于网易云音乐的一些感想
- SASS _ 入门版
- 四川省建设厅关于推行建筑工人实名制管理工作的通知〔2018〕613号
- 开咖啡店会遇到的哪些问题?总结八大解决方法
- 数字孪生3D可视化技术重构和模拟再现工业建筑真实场景
- 一线城市初次租房防坑指南
- 得到课程:高效学习-脱不花
- 从苏宁电器到卡巴斯基(后传)第01篇:讲讲我写完那36篇故事之后的一些事