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 删除任何不需要的空格。