意思是要保存上一条命令的状态。 比如说我在DOS分别下执行md 1 cd 1 md 2 这3条命令后会创建一个“1”文件夹,同时在“1”里面创建一个“2”文件夹。 但是如果我在C中执行system("md 1");system("cd 1");system("md 2");后,它会在它会在当前目录下同时生成一个“1”文件夹和一个“2”文件夹。也就 是说每执行一条语句后它又回到了初始状态。请问有什么好的解决办法。 还有一个问题:C中如何判断哪个盘为U盘。 二楼的第一个问题是对的。但我不是需要在1里面创建一个2. 我是想知道C中如何连续执行多条DOS命令。
你用system()调用,那是多进程的,同时执行。 你要想挨个执行,可以等待前一条命令执行结束返回后,再执行下一条命令。
参考下列C 或C 代码:
代码语言:javascript复制bool ConsoleCompiler(char * ch)
{
// 建立批处理文件
std::ofstream fout( "CBStudy.cmd" );
if ('v'==ch[0]) {
fout << "@echo offnset PATH=" << CBS_vcbin << ";%PATH%nset INCLUDE=" <<CBS_include
<<"nset LIB=" << CBS_lib <<"ncolor an@echo 欢迎使用命令行VC2010编译器中文版 你可以使用TAB自动补全nclncd \mycppn" ;
}
if ('g'==ch[0]) {
fout << "@echo offnset PATH=" << CBS_gccbin << ";%PATH%ncolor an@echo 欢迎使用命令行 GCC 编译器中文版 你可以使用TAB自动补全ng -vncd \mycppn" ;
}
fout.close();
// 执行批处理文件
char szCommandLine[] = "cmd /k CBStudy.cmd";
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW; // 指定wShowWindow成员有效
si.wShowWindow = TRUE; // 此成员设为TRUE的话则显示新建进程的主窗口,
// 为FALSE的话则不显示
BOOL bRet = ::CreateProcess (
NULL, // 不在此指定可执行文件的文件名
szCommandLine, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认线程安全性
FALSE, // 指定当前进程内的句柄不可以被子进程继承
CREATE_NEW_CONSOLE, // 为新进程创建一个新的控制台窗口
NULL, // 使用本进程的环境变量
NULL, // 使用本进程的驱动器和目录
&si,
&pi);
return true;
}