我有一个应用程序和可执行文件。我希望我的应用程序运行我的可执行文件。
可执行文件位于文件夹中,例如“c:\ sample”。
在这个目录中有一个调用我的exe的批处理文件。像:
start a1.exe
start a2.exe
start a3.exe
让我们将其命名为startAll.bat
并假设每个exe都有一个像a1.dat a2.dat这样的数据......这些数据文件都在这个exe附近。
我想通过我的应用程序调用此批处理文件。
system("c:\\\\sample\\\\startAll.bat");
当我这样称呼它时,命令找不到这些exe。
如果我将目录名添加到批处理文件中,则无法找到该时间的数据。 我认为这是因为工作目录。
start c:\sample\a3.exe
如何在调用此批处理文件之前更改工作目录?
或者你还有别的建议吗?
答案 0 :(得分:7)
在致电chdir("C:\\sample")
system(...)
或者在批处理文件中放置cd
命令
修改强>
由于您不在C上:批处理脚本的第一行应该是
C:
cd \sample
<强> EDIT2 强>
使用Johannes和MattH提出的建议,一个更好的BAT文件版本将从这样的东西开始
setlocal
set BATDIR=%~dp0
cd /d %BATDIR%
现在bat文件无论其所在的目录如何都能正常工作,因为没有硬编码路径。 SETLOCAL用于避免运行脚本的副作用(如更改目录或设置环境变量)
答案 1 :(得分:7)
system
函数可以执行以下多个命令:
system("C: && cd \\sample && startAll.bat");
这比更改调用进程的当前工作目录更简洁,因为它可能有自己不需要的副作用。
根据您设置这些文件的方式,可能比将cd
命令硬编码到批处理文件中更简洁。
编辑:我用这样的C程序对此进行了测试:
#include "stdafx.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
system("C: && cd \\temp && test.bat");
return 0;
}
和一个名为C:\temp\test.bat
的批处理文件,如下所示:
echo "Hello world" > pog
当我运行该C程序(在与c:\ temp不同的目录中)时,pog
中出现了一个名为C:\temp
的文件。
答案 2 :(得分:4)
如果我只打算使用相对于批处理文件的路径,我通常更喜欢让我的批处理文件忽略调用者的工作目录。您可以在文件开头使用以下命令执行此操作:
SET BATDIR=%~dp0
CD %BATDIR%
或者,您可以在调用外部文件时%BATDIR%。
要了解上述工作原理,请查看here
答案 3 :(得分:0)
尝试使用双斜杠
system("c:\\sample\\startAll.bat");