ufu*_*gun 1 c++ system batch-file working-directory
我有一个应用程序和可执行文件.我希望我的应用程序运行我的可执行文件.
可执行文件位于文件夹中,例如"c:\ sample".
在这个目录中有一个调用我的exe的批处理文件.喜欢:
start a1.exe
start a2.exe
start a3.exe
Run Code Online (Sandbox Code Playgroud)
我们将其命名为startAll.bat
并假设每个exe都有一个像a1.dat a2.dat这样的数据......这些数据文件都在这个exe附近.
我想通过我的应用程序调用这个批处理文件.
system("c:\\\\sample\\\\startAll.bat");
Run Code Online (Sandbox Code Playgroud)
当我这样称呼它时,命令找不到这些exe.
如果我将目录名添加到批处理文件中,则无法找到该时间的数据.我认为这是因为工作目录.
start c:\sample\a3.exe
Run Code Online (Sandbox Code Playgroud)
在调用此批处理文件之前,如何更改工作目录?
或者你还有别的建议吗?
打电话chdir("C:\\sample")前打电话system(...)
或者cd在批处理文件中输入命令
编辑
因为你不在C:批处理脚本的第一行应该是
C:
cd \sample
Run Code Online (Sandbox Code Playgroud)
EDIT2
使用Johannes和MattH提出的建议,一个更好的BAT文件版本将从这样的事情开始
setlocal
set BATDIR=%~dp0
cd /d %BATDIR%
Run Code Online (Sandbox Code Playgroud)
现在bat文件无论它在哪个目录都可以工作,因为没有硬编码路径.SETLOCAL用于避免运行脚本的副作用(如更改目录或设置环境变量)
该system函数可以采用如下多个命令:
system("C: && cd \\sample && startAll.bat");
Run Code Online (Sandbox Code Playgroud)
这比更改调用进程的当前工作目录更简洁,因为它可能有自己不需要的副作用.
根据您设置这些文件的方式,它可能比将cd命令硬编码到批处理文件中更简洁.
编辑:我用这样的C程序测试了这个:
#include "stdafx.h"
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
system("C: && cd \\temp && test.bat");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和一个名为C:\temp\test.bat这样的批处理文件:
echo "Hello world" > pog
Run Code Online (Sandbox Code Playgroud)
当我运行那个C程序(在c:\ temp的不同目录中)时,确实会pog出现一个被调用的文件C:\temp.
| 归档时间: |
|
| 查看次数: |
7996 次 |
| 最近记录: |