2012-12-17 24 views
0

我在文件夹E:\ TROUBLESHOOT中编译了Fortran 90代码“NewSourceID.exe”。这使用输入文件MAIN.IN在同一个文件夹中。我在同一个文件夹E:\ TROUBLESHOOT中使用批处理脚本run_sa.BAT来运行此可执行文件。这个批处理脚本是在运行时由另一个VB代码生成的(这是一个要求,不能被废除),批处理脚本如下所示。编译Fortran代码在错误的目录中查找输入参数文件

“E:\ TROUBLESHOOT \ NewSourceID.exe”“E:\ TROUBLESHOOT \ MAIN.IN”。

有两种情况 1.当我进入文件夹E:\ TROUBLESHOOT并双击批处理脚本run_sa.BAT时,NewSourceID.exe运行正常,没有任何问题。它在显示路径C:\ WINDOWS \ system32 \ command.exe的命令提示符窗口上运行。

  1. 当我通过在运行时生成批处理脚本从VB脚本执行相同的操作时,出现以下错误。

“ C:\ Documents和Settings \ epsuser \ My文档>” E:\ TROUBLESHOOT \ NewSourceID.exe” “E:\ TROUBLESHOOT \ MAIN.IN” forrtl:重度(29):文件找不到,单元31,文件C:\ Documents and Settings \ eps user \ My Documents \ MAIN.IN

代码试图在路径C:\ Documents and Settings \ epsuser上找到输入文件MAIN.IN \我的文档\ MAIN.IN这是不正确的路径来查找该文件 这发生时,我用一个修改的NewSourceID.exe替换早期代码用于甚至从VB使用以下路径正确运行。 C:\ WINDOWS \ system32 \ command.exe -E:\ TROUBLESHOOT \ run_sa.BAT。如何才能做到这一点?

+0

您应该向我们展示代码,fortran exe如何获取文件名,否则我们无法知道,Aradi的答案对您来说已经足够了。或者只是接受他的答案。 –

回答

0

您确定,Fortran程序NewSourceID读取您传递给它的命令行参数吗?特别是较早的Fortran程序(在Fortran 2003之前)没有标准的方法来解析命令行参数。我想,名称MAIN.IN已硬连接在您使用的代码中,并且始终使用当前目录中的MAIN.IN文件。您可以在执行程序之前通过发出更改目录命令来解决此问题。我不是很熟悉Windows,但类似

cd E:\TROUBLESHOOT 
E:\TROUBLESHOOT\NewSourceID.exe 

在批处理脚本可能会工作。

或者,您可以使用command_argument_count()get_command_argument()函数在Fortran代码中实现适当的命令行参数分析。你需要一个Fortran 2003编译器。

+0

没有Fortran 2003编译器(尽管有些人可能声称是),但是具有此扩展名的Fortran 95就足够了。另外,以前的Fortran编译器过去常常使用'GETARG'作为此作业的扩展。 –