我正在尝试在CPLEX Interactive Optimizer中运行批量.sav
个文件。 IBM提供了一些文档here。但是,我面临一些问题:
batch_trial.bat
)从其位置(C:\Users\myname\folder name\
)拖放到CPLEX
命令提示符中(即,当我点击时)在CPLEX>C:\Users\myname\folder name\batch_trial.bat
之后输入,我收到Command '"C:\Users\myname\folder' does not exist. Type 'help' for a list of commands.
我从某些论坛了解到的错误,这是因为folder name
中的'空格',但是,这些论坛中的答案说使用了双引号会解决这个问题。但我使用双引号,我仍然看到错误。我尝试将批处理文件内容直接输入CPLEX提示符,如下所示(这是batch_trial.bat
的内容,如IBM的文档所示):
CPLEX> @echo off
for /L %%i in (1,1,2) do (
move mytest%i.sav mytest.sav
cplex < mycplexcommands
move cplex.log mytest%i.log
)
这也不起作用:对于@echo
,for
,move
,cplex
中的每一个,我都会收到类似的错误,说这些命令不存在。我在mytest1.sav
中有两个mytest2.sav
,mycplexcommands.txt
和C:\Users\myname\folder name\
。 mycplexcommands.txt
的内容是:
read mytest.sav
optimize
display solution variables 1-10
quit
如果.sav
文件的名称不相同,该怎么办?例如,如果文件名是apg.sav
和hfb.sav
,我如何才能通过批处理文件中的for循环执行这些文件?
谢谢!
答案 0 :(得分:1)
如果您从.bat
文件运行代码,请在%%i
循环声明和其余代码中使用FOR
。
move "mytest%%i.sav" "mytest.sav"
如果您直接在shell
中运行代码块,请在声明和代码中使用%i
。
答案 1 :(得分:1)
听起来您对批处理文件(具有.bat
扩展名的文件)与CPLEX interactive使用的命令文件之间的区别感到困惑。可以从Windows command shell运行批处理文件。使用重定向运算符(如示例中的<
)或-f
选项时,交互操作可以运行CPLEX命令文件。例如,可以使用-f
选项,如下所示:
cplex.exe -f mycplexcommands.txt
对于(1)和(2),由于您尝试从CPLEX交互式内部运行批处理脚本,因此无法正常工作。如果您将mycplexcommands.txt
文件拖到CPLEX交互式中,可能会有效。
对于(3),请参阅How to do a for loop in windows command line?处的stackoverflow线程。也就是说,它应该从(这尚未经过测试)开始:
FOR %%i IN (*.sav) DO
最后,您可能有兴趣查看developerWorks上的Open LP files in CPLEX interactive文章。