Octave 'input' 函数,运行 通过批处理文件
Octave 'input' function, run through batch file
我正在使用批处理文件:
@echo off
C:\Octave\Octave-4.4.1\octave.vbs --force-gui --eval batchTest("'%~dp0'")
cmd /c
到 运行 Octave 脚本
function [] = batchTest(fPath)
disp(fPath);
cd(fPath);
optionNumber = input('Choose option 1 or 2: ');
if optionNumber == 1
fName = input('Input file description: ',"s");
filename = [fName ".xlsx"];
xls = xlsopen(filename,1); % <-- THIS DOES NOT WORK, PRODUCES "FILE POINTER PRESERVED MESSAGE"
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
if optionNumber == 2
filename = "TestFile.xlsx";
xls = xlsopen(filename,1); % <-- THIS WORKS AS EXPECTED
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
在批处理文件的目录中创建一个 Excel 文件。
选项编号 1 产生“文件指针已保留”警告,并且未创建 Excel 文件。似乎我不能使用由 Octave 的 'input' 函数全部或部分创建的任何字符串。使用“.xlsx”输入完整文件名并将该变量传递给 'xlsopen' 函数没有帮助。选项 2 工作正常,但我需要生成多个文件,因此“fName”描述符很重要。我尝试将 SETLOCAL ENABLEDELAYEDEXPANSION 添加到批处理文件中。我还尝试了使用选项 2 的变通方法,然后添加
rename("TestFile.xlsx",[fName ".xlsx"])
到 Octave 脚本,但这会在 'rename' 函数中产生“无效输入”错误,因此它也不喜欢 'input' 创建的字符串。问题仅在于 'xlsopen' 和 'rename' 函数; 'input' 函数可以很好地选择选项编号。
从 Octave 命令行直接执行 'batchTest(pwd)' 时,任一选项都有效。只有从批处理文件执行时才会出现此问题。任何建议将不胜感激。
问题听起来是,当您创建字符串时,您包含了转义字符,这些字符会弄乱您的文件名。
从评论中的讨论看来,您的字符串中包含回车 return 字符,导致文件名错误。
目前尚不清楚为什么只有当 运行 来自批处理文件时才会出现这种情况,但作为解决方法,您可以通过使用 strtrim
删除任何不需要的空格。
我正在使用批处理文件:
@echo off
C:\Octave\Octave-4.4.1\octave.vbs --force-gui --eval batchTest("'%~dp0'")
cmd /c
到 运行 Octave 脚本
function [] = batchTest(fPath)
disp(fPath);
cd(fPath);
optionNumber = input('Choose option 1 or 2: ');
if optionNumber == 1
fName = input('Input file description: ',"s");
filename = [fName ".xlsx"];
xls = xlsopen(filename,1); % <-- THIS DOES NOT WORK, PRODUCES "FILE POINTER PRESERVED MESSAGE"
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
if optionNumber == 2
filename = "TestFile.xlsx";
xls = xlsopen(filename,1); % <-- THIS WORKS AS EXPECTED
xls = oct2xls({"OutputData"},xls,1,"A1");
xlsclose(xls);
end
在批处理文件的目录中创建一个 Excel 文件。
选项编号 1 产生“文件指针已保留”警告,并且未创建 Excel 文件。似乎我不能使用由 Octave 的 'input' 函数全部或部分创建的任何字符串。使用“.xlsx”输入完整文件名并将该变量传递给 'xlsopen' 函数没有帮助。选项 2 工作正常,但我需要生成多个文件,因此“fName”描述符很重要。我尝试将 SETLOCAL ENABLEDELAYEDEXPANSION 添加到批处理文件中。我还尝试了使用选项 2 的变通方法,然后添加
rename("TestFile.xlsx",[fName ".xlsx"])
到 Octave 脚本,但这会在 'rename' 函数中产生“无效输入”错误,因此它也不喜欢 'input' 创建的字符串。问题仅在于 'xlsopen' 和 'rename' 函数; 'input' 函数可以很好地选择选项编号。
从 Octave 命令行直接执行 'batchTest(pwd)' 时,任一选项都有效。只有从批处理文件执行时才会出现此问题。任何建议将不胜感激。
问题听起来是,当您创建字符串时,您包含了转义字符,这些字符会弄乱您的文件名。
从评论中的讨论看来,您的字符串中包含回车 return 字符,导致文件名错误。
目前尚不清楚为什么只有当 运行 来自批处理文件时才会出现这种情况,但作为解决方法,您可以通过使用 strtrim
删除任何不需要的空格。