请假:WinExec执行.bat文件不成功的问题

yitaohust 2008-09-06 04:01:50
我写了个.bat文件,希望在VC中去调用执行它。但不知道是何缘故,程序里调用就是不执行,但我手工去双击那个.bat就能正常执行。

我的rename.bat是这样的:

@echo off
rename ..\1.txt 222.txt

然后,这个.bat是放在我的VC工程目录下的Debug目录下,1.txt是放在上一级目录下。

掉用方法:WinExec("rename.bat", SW_SHOWNORMAL);

执行没有任何反应,但我把rename.bat换成notepad.exe却能正常打开记事本。

我用ShellExecute方法调用也是没反应。

不知道是何原因,是bat存放位置问题,还是别的问题,请指点!
...全文
552 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yitaohust 2008-09-09
  • 打赏
  • 举报
回复
另外,ShellExecute和WinExec都是可以实现的。
yitaohust 2008-09-09
  • 打赏
  • 举报
回复
问题解决了,jzkdl 的评论虽然没有直接解决我的问题,但给了我一点启示,这个问题搞了我1个多星期,出现的现象很诡异,最后发现,我的VC的工程名是cmd,这可能与系统的cmd同名了,导致我按照各位的意见去修改去实现,都还是没有得到和各位一样的结果。
看来,原因就出现工程名的命名上。我重建了个工程,问题就都解决了。
谢谢各位!
量子 2008-09-07
  • 打赏
  • 举报
回复
应该用ShellExecute而不是WinExec.
aj3423 2008-09-06
  • 打赏
  • 举报
回复
ShellExecute(NULL,"open",".\\my.bat",NULL,NULL, SW_HIDE );//SW_HIDE是隐藏黑色窗口

我是这样调用bat的,不会有问题,前提是 exe,bat,txt在同一目录下
并且不要用ide自带的功能启动exe,手动双击exe运行,否则路径会变
缘之一念 2008-09-06
  • 打赏
  • 举报
回复
批处理文件名不能和系统DOS命令相同,不然会出错.
缘之一念 2008-09-06
  • 打赏
  • 举报
回复
你吧rename.bat 改成别的名字,它和系统命令rename重名了..执行rename.bat产生了递归..
jay的Fans 2008-09-06
  • 打赏
  • 举报
回复
不是直接运行生成的EXE文件的话,可能是当前目录不一致造成的
greatws 2008-09-06
  • 打赏
  • 举报
回复
斜杠打反了吧,把bat里的斜杠换个方向


实在不行再试试WinExec("cmd.exe /c rename ..\\1.txt 222.txt > c:\\ret.txt", SW_SHOWNORMAL);

这样看下,输出信息在c:\ret.txt
yitaohust 2008-09-06
  • 打赏
  • 举报
回复
这种方法我也试了,也是没反应。你在你本地测试能成功么?谢谢1
[Quote=引用 4 楼 aj3423 的回复:]
ShellExecute(NULL,"open",".\\my.bat",NULL,NULL, SW_HIDE );//SW_HIDE是隐藏黑色窗口
[/Quote]
yitaohust 2008-09-06
  • 打赏
  • 举报
回复
jennyvenus ,你好,我按照你的方式也试过了,还是不执行。下面就是那句代码:
void CCmdDlg::OnDisk()
{
// TODO: Add your control notification handler code here
WinExec("c:\\re.bat", SW_HIDE);

}
我的bat也放到了C盘根目录下,1.txt也放在C根目录下,我的bat内容是:
@echo off
ren 1.txt 222.txt

直接双击.bat都是可以把那个文本改名过来的。
很奇怪,期待解答。
用户 昵称 2008-09-06
  • 打赏
  • 举报
回复
你将.bat存储到要操作的路径下面,并且在那下面操作,比如要给c:\a.txt 改名,这样做

a.bat
内容

ren a.txt b.txt


并将a.bat存储在 c:\

aj3423 2008-09-06
  • 打赏
  • 举报
回复
ShellExecute(NULL,"open",".\\my.bat",NULL,NULL, SW_HIDE );//SW_HIDE是隐藏黑色窗口
jay的Fans 2008-09-06
  • 打赏
  • 举报
回复
其实还是文件的路径的问题
system("ren 1.txt 222.txt");这样使用的话,直接运行生成的EXE文件是可以修改成功的
WinExec("rename.bat", SW_SHOWNORMAL);这样的话保证EXE文件与bat文件同级,txt文件在上级,直接运行那个EXE也是可以修改的
yitaohust 2008-09-06
  • 打赏
  • 举报
回复
按照你的试验了,还是不行。谢谢!
greatws 2008-09-06
  • 打赏
  • 举报
回复
WinExec("cmd.exe /c rename.bat", SW_SHOWNORMAL);

这样试下

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧