我正在尝试编写一个批处理文件来自动执行一些常规的Matlab进程 . 批处理文件使用For / L结构从0循环到设定值(通常在50和75之间) . 该脚本将主Matlab脚本复制到子文件夹并运行它 . 批处理通常会继续向前,所以我把一个:循环等到Matlab结束 .
echo off
setlocal EnableDelayedExpansion
REM The format is matlab_auto.in (max value).
For /L %%G in (0,1,%1) do (
REM Sanity check
echo 1 %%G
REM Create Outputs folder if non-existent
if not exist Outputs md Outputs
REM Copy .m file into deg folder and cd to folder
copy values_calc.m %%Gsort\values_calc.m
cd %%Gsort
echo Got to folder
REM Running .m script and sanity check
echo 2 %%G
matlab -nosplash -nodesktop -noFigureWindows -logfile output.log -r "run('values_calc.m');"
echo 3 %%G
REM Waiting for matlab to finish
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
echo 4 %%G
if errorlevel 1 goto loop
echo Finished Matlab
echo 5 %%G
REM Copy .m outputs into outputs folder, ignoring confirmation
copy Output_*.* ..\Outputs /Y
echo Copied outputs
REM Sanity check and return home
echo 6 %%G
cd %~dp0
echo Home again
)
我遇到的问题是它在For循环的第一次迭代后结束 . Echo 1,2,3为0. Echo 4在第一次通过时显示0:循环但是它显示其余循环和Echos 5和6的%G . 它也不会继续进行For循环的进一步迭代 . 我假设这是因为%% G不再是一个数字(或在指定的范围内) .
我已经尝试实现一个调用子程序来使用循环外的goto但是它打开了Matlab数十次,导致计算机崩溃 .
任何见解或建议表示赞赏 . 谢谢 .
编辑:更改::以评论REM . 它没有解决这个问题,但看起来更好 .
编辑2:我有一个测试用例来证明这个问题 . 它的东西有:loop或goto . echo off setlocal EnableDelayedExpansion
for /l %%G in (0,1,5) do (
:loop
echo %%G
pause
if %%G==0 goto loop
)