我写了个.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存放位置问题,还是别的问题,请指点!

解决方案 »

  1.   

    WinExec("cmd.exe /c rename.bat", SW_SHOWNORMAL);这样试下
      

  2.   

    其实还是文件的路径的问题
    system("ren 1.txt 222.txt");这样使用的话,直接运行生成的EXE文件是可以修改成功的
    WinExec("rename.bat", SW_SHOWNORMAL);这样的话保证EXE文件与bat文件同级,txt文件在上级,直接运行那个EXE也是可以修改的
      

  3.   

    ShellExecute(NULL,"open",".\\my.bat",NULL,NULL, SW_HIDE );//SW_HIDE是隐藏黑色窗口
      

  4.   

    你将.bat存储到要操作的路径下面,并且在那下面操作,比如要给c:\a.txt 改名,这样做a.bat
    内容ren a.txt b.txt
    并将a.bat存储在 c:\
      

  5.   

    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都是可以把那个文本改名过来的。
    很奇怪,期待解答。
      

  6.   

    斜杠打反了吧,把bat里的斜杠换个方向
    实在不行再试试WinExec("cmd.exe /c rename ..\\1.txt 222.txt > c:\\ret.txt", SW_SHOWNORMAL); 这样看下,输出信息在c:\ret.txt
      

  7.   

    不是直接运行生成的EXE文件的话,可能是当前目录不一致造成的
      

  8.   

    你吧rename.bat 改成别的名字,它和系统命令rename重名了..执行rename.bat产生了递归..
      

  9.   

    批处理文件名不能和系统DOS命令相同,不然会出错.
      

  10.   

    ShellExecute(NULL,"open",".\\my.bat",NULL,NULL, SW_HIDE );//SW_HIDE是隐藏黑色窗口 我是这样调用bat的,不会有问题,前提是 exe,bat,txt在同一目录下
    并且不要用ide自带的功能启动exe,手动双击exe运行,否则路径会变
      

  11.   

    应该用ShellExecute而不是WinExec.
      

  12.   

    问题解决了,jzkdl 的评论虽然没有直接解决我的问题,但给了我一点启示,这个问题搞了我1个多星期,出现的现象很诡异,最后发现,我的VC的工程名是cmd,这可能与系统的cmd同名了,导致我按照各位的意见去修改去实现,都还是没有得到和各位一样的结果。
    看来,原因就出现工程名的命名上。我重建了个工程,问题就都解决了。
    谢谢各位!
      

  13.   

    另外,ShellExecute和WinExec都是可以实现的。