社区
C++ Builder
帖子详情
如何用WinExec来执行DOS命令?
cbz
2003-02-18 08:49:41
大家好,下面的做法为什么不行呢?
WinExec("copy 111.txt + 222.txt /b",SW_HIDE);
...全文
2086
13
打赏
收藏
如何用WinExec来执行DOS命令?
大家好,下面的做法为什么不行呢? WinExec("copy 111.txt + 222.txt /b",SW_HIDE);
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
penu
2003-02-26
打赏
举报
回复
怎么不结贴?:(
penu
2003-02-20
打赏
举报
回复
注意:98用command,2000用cmd.
penu
2003-02-20
打赏
举报
回复
假设要合并的文件为1.txt,2.txt,2.txt合并到1.txt中。
=======
1、如果两个文件在同一个目录下(假设都在C:\temp目录下):
SetCurrentDir("c:\\temp");
WinExec("command /c copy 1.txt+2.txt /b",SW_HIDE);
=======
2、如果两个文件不在同一个目录下,
假设 1.txt 在 C:\temp
2.txt 在 D:\temp
SetCurrentDir("c:\\temp");
WinExec("command /c copy 1.txt+D:\\temp\\2.txt /b",SW_HIDE);
明白了吗?
penu
2003-02-19
打赏
举报
回复
正确的写法是:
2000下:
SetCurrentDir("c:\\");
WinExec("cmd /c copy 1.txt+2.txt /b",SW_HIDE);
98下:
SetCurrentDir("c:\\");
WinExec("command /c copy 1.txt+2.txt /b",SW_HIDE);
此处假设你要复制的文件所在目录为C:\,要合并的文件分别为1.txt和2.txt,合并后文件名仍为1.txt。你的程序中应作相应修改。
如果你合并到一个新文件3.txt,则应为:
2000:
WinExec("cmd /c copy 1.txt+2.txt 3.txt /b",SW_HIDE);
98:
WinExec("command /c copy 1.txt+2.txt 3.txt /b",SW_HIDE);
penu
2003-02-19
打赏
举报
回复
楼主:
你的语句
WinExec("copy 111.txt + 222.txt /b",SW_HIDE);
有误:
111.txt + 222.txt 之间不能有空格,应该为:
111.txt+222.txt
cscer
2003-02-19
打赏
举报
回复
呵呵~
不错!
学习……
cbz
2003-02-19
打赏
举报
回复
to penu(懒猫) :
不知道是否能在WinExec的命令行里面用路径呢? 我在我这里试了好像不行,
WinExec("cmd /c copy c:\\1.txt+c:\\aaa\\2.txt /b",SW_HIDE);
pepsi1980
2003-02-18
打赏
举报
回复
建议用CreateProcess(),ShellExecute()
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = ""; //可以加参数
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
以下是一个使用CreateProcess()函数的例子:
void CreateChildProcessAndWaitUntilDone(const AnsiString& strCmdLine)
{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
// Set up members of STARTUPINFO structure.
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpDesktop = NULL;
siStartInfo.dwFlags = 0;
// Create the child process.
CreateProcess(
NULL,
strCmdLine.c_str(),
NULL, // process security attributes
NULL, // primary thread security attributes
0, // handles are inherited
0, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo); // receives PROCESS_INFORMATION
// Wait for the processs to finish
DWORD rc = WaitForSingleObject(
piProcInfo.hProcess, // process handle
INFINITE);
}
cbz
2003-02-18
打赏
举报
回复
to cdws222(二当家) ;
并不是dos命令只能用system来执行的,由于讨厌system出现的黑屏,才用WinExec来运行的
cdws222
2003-02-18
打赏
举报
回复
人家明明是WinExec嘛干什么让人家运行DOS命令?
运行DOS命令的函数是system("copy 111.txt + 222.txt /b");
cbz
2003-02-18
打赏
举报
回复
咦,用楼上的方法试试,行了,不过,不清楚为什么不能再命令中加上路径呢?
如下不行:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WinExec("cmd /c copy c:\\111.txt + c:\\222.txt /b",SW_HIDE);
}
而非得:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetCurrentDir("c:\\");
WinExec("cmd /c copy zbc.txt + gsx.txt /b",SW_HIDE);
}
呢?
解决了,马上结贴
COKING
2003-02-18
打赏
举报
回复
win98 :command /c dos命令 或 command /k dos命令
win2000 :cmd /c dos命令 或 cmd /k dos命令
guanri
2003-02-18
打赏
举报
回复
你的dos命令就错了
在VC下
执行
DOS命令
本文介绍了在
Win
dows系统中通过不同API
执行
DOS命令
的方法,包括system、
Win
Exec
、Shell
Exec
ute等函数的使用技巧,并展示了如何捕获命令
执行
结果。
delphi中
Win
Exec
的使用
本文详细介绍了Delphi编程中
Win
Exec
函数的用途,包括如何
执行
DOS命令
符操作,特别注意了在参数中有空格时应如何正确使用双引号,并解释了PAnsiChar格式的重要性。
vc调用
dos命令
总结
本文介绍了如何在程序中调用
DOS命令
而不出现闪屏现象,并通过
Win
Exec
函数及命令行技巧实现命令
执行
结果的反馈。此外还分享了如何使用DOS批处理语法
执行
多个命令及定时
执行
的方法。
C++ Builder
13,872
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章