1

我有一个应用程序和可执行文件。我希望我的应用程序运行我的可执行文件。

可执行文件在一个文件夹中,比如说在“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

在调用此批处理文件之前如何更改工作目录?

或者你有什么建议吗?

4

4 回答 4

7

打电话chdir("C:\\sample")前打电话system(...)

或者cd在你的批处理文件中输入一个命令

编辑

由于您不在 C 上:批处理脚本的第一行应该是

C:
cd \sample

编辑2

使用 Johannes 和 MattH 提出的建议,一个更好的 BAT 文件版本将从以下内容开始

setlocal
set BATDIR=%~dp0
cd /d %BATDIR%

现在无论它位于哪个目录,bat 文件都可以工作,因为没有硬编码路径。SETLOCAL 用于避免运行脚本的副作用(如更改目录或设置环境变量)

于 2009-09-03T11:49:34.620 回答
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.

于 2009-09-03T11:55:39.350 回答
4

如果我只打算使用相对于批处理文件的路径,我通常更喜欢让我的批处理文件忽略调用者的工作目录。您可以在文件开头使用以下内容执行此操作:

SET BATDIR=%~dp0
CD %BATDIR%

或者您可以在调用外部文件时使用 %BATDIR%。

要了解上述工作原理,请查看此处

于 2009-09-03T12:46:30.393 回答
0

尝试使用双斜杠


system("c:\\sample\\startAll.bat");
于 2009-09-03T11:43:37.287 回答