0

E:\TROUBLESHOOT フォルダにコンパイル済みの Fortran 90 コード "NewSourceID.exe" があります。これは、同じフォルダー内の入力ファイル MAIN.IN を使用します。同じフォルダー E:\TROUBLESHOOT にあるバッチ スクリプト run_sa.BAT を使用して、この実行可能ファイルを実行します。このバッチ スクリプトは、実行時に別の VB コードによって生成され (これは要件であり、削除することはできません)、バッチ スクリプトは次のようになります。

"E:\TROUBLESHOOT\NewSourceID.exe" "E:\TROUBLESHOOT\MAIN.IN".

2 つのシナリオがあります。 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 user\My Documents\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()または、関数と関数を使用して、Fortran コードに適切なコマンド ライン引数の解析を実装することもできますget_command_argument()。そのためには、Fortran 2003 コンパイラが必要です。

于 2012-12-17T12:16:56.843 に答える