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

MATLAB:并行运行.bat:可能有多个工作目录?,matlab,batch-file,parallel-processing,Matlab,Batch File,Parallel Processing,我在Matlab2013a的parfor循环中使用命令system(或dos)运行.bat文件。是否有方法更改命令在哪个目录中执行?到目前为止,它似乎总是当前(工作)目录。另一种选择是在parfor循环中更改工作目录,但这意味着同时拥有多个工作目录,这似乎是不可能的。我这样做的原因是我有一个Simpack模型,并且希望同时运行几个不同的模拟。在串行for循环中,我可以通过一次一个地将模拟规范复制到Simpack文件夹来实现这一点,但在并行情况下,这一点必须更改 parfor i=1:2

我在Matlab2013a的
parfor
循环中使用命令
system
(或
dos
)运行.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
命令。

我认为您在这方面做得对。您可以使用
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
system('cd somewhere & C:\SIMPACK...');

尝试更改由
system()
命令创建的进程内的目录-这很好,因为它是一个新的、独特的进程,它可以有自己的目录

大概是这样的:

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
system('cd somewhere & C:\SIMPACK...');

我在这里猜测,因为我没有Matlab,所以我没有把它作为一个正式的答案,但也许可以尝试
system('cd-somewhere&C:\SIMPACK…')
,这应该允许
system()
创建的单独进程有自己的不同目录。太简单了!你的建议很有效,谢谢。我也将尝试下面的Edric方法,但我的问题实际上已经解决了。我将添加它作为一个完整的答案,因为它是有效的:-)我发现在parfor循环中确实有可能“同时”有更多的工作目录。我的原始代码有一个与此无关的问题。谢谢你的回答,但我还是会选择在
系统中添加
cd
命令,因为我觉得它更干净。