我想在 Windows 10 上使用 GNU Octave 5.2 运行一个复杂的 m 文件。我将其精简为一个非常简单的示例,但它也不起作用:
C:\test\start_test.bat:
call C:\Tools\Octave\mingw64\bin\octave-cli.exe C:\test\write_file.m
Rem call C:\Tools\Octave\mingw64\bin\octave.bat C:\test\write_file.m
... 和 C:\test\write_file.m 来获取一些调试输出,因为我不知道任务是否真的运行了:
runtime = strftime ("%Y-%m-%d-%H-%M-%S", localtime (time ()));
disp('write file-1 with relative path' );
fileID = fopen(['run-',runtime,'-1.txt'],'w');
fprintf(fileID,'foo');
fclose(fileID);
disp('write file-2 with absolute path');
fileID = fopen(['C:\test\run-',runtime,'-2.txt'],'w');
fprintf(fileID,'foo');
fclose(fileID);
disp('... done');
如果我在 Windows 命令行上运行 bath 文件(使用与任务计划程序中相同的用户),它就会正常工作。Windows 用户是非特权用户。我在 bat 文件中运行其他 exe 或 python 脚本以及使用旧版 Windows 运行 octave m 文件时没有遇到任何问题。在任务计划程序中,我目前不使用触发器,我只想手动使用 bat 文件运行任务并尝试了这些可能性,但总是得到 (0x1) 的返回值并且没有写入测试文件:
- 以最高权限运行
- 不要运行bat文件,而是直接在“操作”选项卡中输入octave的路径
- 将 bat 文件中的“call”更改为“start”或不更改任何内容(仅使用普通命令)
A类似主题我开始回答的问题没有帮助。
答案1
在 bat 脚本中你必须先进入另一个脚本的目录,因此该 bat 文件如下所示(就我而言):
cd C:\test\
call C:\Tools\Octave\mingw64\bin\octave-cli.exe C:\test\write_file.m
这很奇怪,因为所有路径都是绝对的,以避免这些问题。