MATLAB:并行运行.bat:可能有多个工作目录?

时间:2015-01-06 08:14:17

标签: matlab batch-file parallel-processing

我在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命令。

2 个答案:

答案 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...');