在一个程序里调用另一个程序——关于一些控制台命令

来源:互联网 发布:js ajax 跨域访问 编辑:程序博客网 时间:2024/06/05 17:37

把自己n久以前某个博客里的文章移植过来的说~~~


Posted on 2011-02-15 23:19


这两天在折腾着怎么在一个程序里调用另一个程序。。。。可以调用system函数,通过控制台调用那另一个程序。

先ps:我要做的是运行
RunTest.exe,其间调用DataMaker.exe生成数据,作为STD_STL.exe的测试数据,运行完RunTest.exe后有
STD_STL.exe运行结果,放在指定的文件里。


ps:

void system(const string& cmd){    system(cmd.c_str());}const string catalog = "E:\\codes\\VisualStudio2010\\";     \\存放RunTest和DataMaker等项目的目录

首先,不要犯白痴错误:

1、路径名不能有空格
2、windows下路径名分隔符是“\”,在程序里都要用“\\”转义



接下来,要了解,在程序RunTest运行的时候,可以通过“cd”打开相应的目录,但是该语句执行完后又会马上回
RunTest\RunTest目录下。


比如:我现在要打开DataMaker里的Debug文件夹,
运行里面的DataMaker.exe,我要把这两句命令写在同一个语句里,不能分为两个语句写(即一个语句打开文件夹,下一个语句运行DataMaker.exe),因为在第一个语句运行完会默认回到RunTest\RunTest这个目录下,这时候再要求程序运行DataMaker.exe的话会返回 “DataMaker.exe不是内部或外部命令,也不是可运行的程序或批处理文件”。

system("cd " + catalog + "DataMaker\\Release && DataMaker.exe > in.txt");

这一句的意思是打开Release文件夹并运行DataMaker.exe,结果放在当前目录(即Release文件夹)下的in.txt文件里(若无此文件则会自动生成)。


 

【一些常用的dos命令】

1、打开命令cd

格式:cd 路径

如:cd E:\codes\DataMaker


2、复制命令copy

格式:copy 源文件 目标文件

如:copy E:\codes\a.txt E:\a.txt

这样就会把codes文件夹里的a.txt文件复制到E盘目录下。


若:copy E:\codes\a.txt E:\b.txt

这样E盘目录下就会有个b.txt文件,内容与a.txt文件一样。

如果要把文件复制到目前路径下,则目标文件可省去路径,直接写上文件名即可。

如:已在E盘目录下:

copy codes\a.txt b.txt


3、建立命令md

在当前目录下新建文件:md 文件

在指定目录下新建文件:md 路径+文件

如:md E:\codes\test

会在codes目录下生成名为test的文件夹


4、显示命令dir

dir 路径

如:dir E:\codes

显示codes文件夹里的所有目录及其子目录下的所有文件


5、比较命令fc

fc 对比文件1 对比文件2

如:fc E:\codes\a.txt E:\b.txt

若两个文件一样,则返回“找不到异常”





附上此次项目测试中在
Linux下用到的命令:

1、打开命令

     cd E:\codes\VisualStudio2010\DataMaker\Release && DataMaker.exe > in.txt

<-->  ../DataMaker/Release/DataMaker > in.txt  

Linux下执行程序没有exe后缀,而且分隔符是不同的~

不需要写E:\codes\VisualStudio2010,因为RunTestDataMaker等项目都是在同个目录下。而且在win下,生成in.txt存在于DataMaker\Release目录下,而Linux下则是存在于RunTest/RunTest目录下。


2、比较命令

     fc STD_STL.out LSS_STL.out

<-->  diff STD_STL.out LSS_STL.out