Using a combination of spmd and spmdIndex (NOT labIndex, which is obsolete), I was able to achieve what I wanted: setting the DOS path environment for each worker individually. You can also write messages from each worker to a shared log file:
parpool(4);
arraystuff = ["Users","Home","Lib","exe");
execution_path = 'C:/Users/kurt/matlab/batch_files';
run_path = strcat(execution_path, '/run_cases.bat');
logfile = 'C:/Users/kurt/logfile.txt';
spmd
    switch spmdIndex
        case 1
            if(ispc)                            % running on a PC?
                setenv('input_path', arrayStuff(1,spmdIndex));  % set the DOS environment
            end
            system(run_path, '-echo');      % do some work on this core
            msg = fopen(logfile, 'a');          % open diagnostic log
            fprintf(msg, '%s %s %s %s', datetime('now'), ' worker ', num2str(spmdIndex), ' completed');
            fclose(msg);
        case 2
             if(ispc)                            % running on a PC?
                setenv('input_path', arrayStuff(1,spmdIndex));  % set the DOS environment
            end
            system(run_path, '-echo');      % do some work on this core
            msg = fopen(logfile, 'a');          % open diagnostic log
            fprintf(msg, '%s %s %s %s', datetime('now'), ' worker ', num2str(spmdIndex), ' completed');
            fclose(msg); 
        case 3
            % etc
        case 4
            %etc
    end
end
The 'system', 'fprintf' and 'setenv' functions are not necessary, but illustrate some capabilities for working with remote cores. Printing to a log file is one way to debug multithreaded code, since you can't set breakpoints. Note that system calls only work in Process pools, not Thread pools.