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

MATLAB: Running a .bat in parallel: multiple working directories possible?

我在 Matlab 2013a 的 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() 命令创建的进程中更改目录 - 这很好,因为它是一个新的、不同的进程,它可以有自己的目录。

像这样:

system('cd somewhere & C:\SIMPACK...');