想让命令行(cmd.exe)执行一个命令怎么办

在某些场合,我们会有这样的想法,在程序中启动cmd.exe,并且让它执行一命令. 例如想让cmd.exe执行taskkill. 前者很好实现,就是调用类似于CreateProcess的API, 要实现后者我们可能会想到将命令taskkill加到参数中不就可以了吗? 但是这是不可以的(添加参数的方法要稍作改动也可以
), 这个我已经做过验证了, 为什么不可以, 我暂时不深究. 先考虑如果解决这个问题.

 

批处理, 实际上windows为我们提供的一个脚本处理方案. 我们可以将所要执行的脚本都一次写入以bat为后缀的文本文件中, 我们只要去执行这个批处理, 里面的脚本就可以执行.

 

基于这个思路, 我们将我们的命令放在批处理文件中, 那么我们所举的这个例子就可以taskkill放在bat文件中即可. 这样我们的问题得以解决.

 

接下来我们看看taskkill这个命令,这个命令的作用是结束一个进程.后面的参数会随需而变, 参数就是想要结束的进程进程名, 可以简单的将进程的名字写在批处理里面, 象这样:

taskkill /im winword.exe

这样当我们执行这个批处理的时候,就可以结束微软的word字处理程序. 但是这样缺少灵活性, 结束不同进程需要重新编辑这个批处理. 因此我们这里的winword.exe,也就是进程名通过比处理参数的名字传进来.象这样:

taskkill /im %1

这里的就是传给批处理的第一个参数. 我们做了这些工作,接下来我们想结束word进程可以这样,执行我们写的批处理,参数是winword.exe

 

到这里可能有人问,你这样做, 要结束进程名不得在程序写死了, 不不不, 千万不要这么做, 这个参数得让用户自己去选择.

还有人会说, 你用类似TerminateProcess不就可以解决这个问题, 我想说的解决问题的办法有很多中, 只要选择最适合你的就好. 在我的应用场景中, 这个方案就是我的最佳, 因为我遇到的情形恰好是不能改动源码的.

 

写到这里应该结束了, 等等.

 

还有个问题没有解释清楚, 就是上面标注的部分, 如果我们把添加参数的方法改动一二就可以.

我们不是简单象这样, cmd.exe taskkill /im winword.exe

而是多加一个参数/c或者/k, 具体这两个参数的意义请在命令窗口中输入cmd /?查看.

我们改为:

cmd.exe /c /taskkill /im winword.exe

 

另外我们可以把要接受的进程可以放在一个文本文件中(.txt), 一行一个进程名. 让后在批处理里面用for语句进行分析.

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

留言

你的邮箱是保密的 必填的信息用*表示