我在Matlab 2013a的system
循环中使用命令dos
(或parfor
)运行.bat文件。有没有办法改变命令执行的目录?到目前为止,它似乎总是当前(工作)目录。另一个选择是更改parfor循环中的工作目录,但这意味着同时拥有多个工作目录,这似乎是不可能的。我这样做的原因是我有一个Simpack模型,并希望同时运行几个不同的模拟。在串行for循环中,我可以通过一次一个地将模拟规范复制到Simpack文件夹来实现,但是必须同时将其更改。
parfor i=1:2
...
cd(path_model_main_temp_i);
system('C:\SIMPACK\SIMPACKv8.9\s_8904\simpack\com\spck.bat simpack integ modelname');
copyfile(path_results_temp_i, path_results{i});
end
此代码段不起作用,但它是正确的方向吗?
编辑:事实证明我的代码存在不同的问题。可以在parfor循环中使用cd
命令。
答案 0 :(得分:0)
我认为你在这里走在正确的轨道上。您可以使用getCurrentTask
来确定放置该目录的位置。例如,像这样:
parfor idx = 1:2
t = getCurrentTask();
if isempty(t)
% running on the client - use tempdir
d = tempdir();
else
% on a worker - make a subdirectory using task ID
d = fullfile(tempdir(), num2str(t.ID));
mkdir(d);
end
cd(d);
pwd
% do stuff
end
答案 1 :(得分:0)
尝试更改system()
命令创建的进程中的目录 - 这很好,因为它是一个新的,独特的进程,它可以有自己的目录。
这样的事情:
system('cd somewhere & C:\SIMPACK...');