0

我在文件夹 E:\TROUBLESHOOT 中有一个已编译的 fortran 90 代码“NewSourceID.exe”。这使用同一文件夹中的输入文件 MAIN.IN。我使用同一文件夹 E:\TROUBLESHOOT 中的批处理脚本 run_sa.BAT 来运行此可执行文件。这个批处理脚本是由另一个 VB 代码在运行时生成的(这是一个要求,不能取消),批处理脚本如下所示。

"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 and Settings\epsuser\My Documents>"E:\TROUBLESHOOT\NewSourceID.exe" "E:\TROUBLESHOOT\MAIN.IN" forrtl: 严重 (29): 找不到文件,单元 31,文件 C: \Documents and Settings\eps 用户\我的文档\MAIN.IN

代码尝试在路径 C:\Documents and Settings\epsuser\My Documents\MAIN.IN 上查找输入文件 MAIN.IN,这不是查找文件的正确路径。当我用修改过的替换 NewSourceID.exe 时发生了这种情况。早期的代码甚至可以通过以下路径从 VB 中正确运行。C:\WINDOWS\system32\command.exe -E:\TROUBLESHOOT\run_sa.BAT。如何才能做到这一点?

4

1 回答 1

0

您确定 Fortran 程序 NewSourceID 会读取您传递给它的命令行参数吗?尤其是较旧的 Fortran 程序(在 Fortran 2003 之前)没有解析命令行参数的标准方法。我猜,这个名字MAIN.IN在你使用的代码中是硬连线的,它总是使用当前目录MAIN.IN中的文件。您可以通过在执行程序之前发出更改目录命令来解决此问题。我对 Windows 不是很熟悉,但是类似

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

在您的批处理脚本中可能会起作用。

或者,您可以使用command_argument_count()andget_command_argument()函数在 Fortran 代码中实现正确的命令行参数解析。为此,您需要一个 Fortran 2003 编译器。

于 2012-12-17T12:16:56.843 回答