桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

標準入力

d:id:youandi:20080825#p2
F77->F90の変換プログラムが標準入力で変換対象のソースコードファイル名を受け取る仕組みになっているんですが、これを上手い具合にプログラムから指定出来ないモンかと調べてみる。

shellで起動させた実行ファイルに引数を渡すには?
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200703/07030154.txt

んで見つかったのか上記の情報で、「hoge.f」を指定するのに以下のような感じで制御出来ました。

Set oExec = wshShell.Exec("to_f90.exe")
oExec.Stdin.WriteLine "hoge" 

バッチファイルで入力ファイル一覧を作成して、VBScriptで一括処理。

@ECHO OFF

CD /D %~dp0

REM 処理対象拡張子
SET EXT_TYPE=*.f

REM ログファイル名
SET TGT_FILE=target.txt

ECHO 処理対象ファイルの検索中...

DEL /Q "%TGT_FILE%"

REM サブディレクトリを含めて処理を行う
FOR /R %%i IN (%EXT_TYPE%) DO (
	REM 処理ファイル名の出力
	ECHO %%i>>"%TGT_FILE%"
)

@PAUSE

CALL cscript.exe /NOLOGO to_F90v2.vbs

@PAUSE
Option Explicit

Const 	ForReading = 1
Const 	ForWriting = 2
Dim 	wshShell
Dim 	oExec
Dim 	oFso

' ##############################################################################
Set wshShell = CreateObject("WScript.Shell")
Set oExec = wshShell.Exec("to_F90.exe")

Set oFso = CreateObject("Scripting.FileSystemObject")

Call ExecConvert

' コンソールに表示
Do Until oExec.StdOut.AtEndOfStream
'    WScript.Echo oExec.StdOut.ReadLine
Loop

Set oExec = Nothing
Set wshShell = Nothing
Set oFso = Nothing

'**処理終了**
WScript.Quit


Sub ExecConvert()
	Dim oTxtFileIn
	Dim oTxtFileOut
	Dim strLine

	Set oTxtFileIn = oFso.OpenTextFile("target.txt", ForReading)
'	Set oTxtFileOut = oFso.CreateTextFile("result.txt", True)

'	Do Until oExec.StdOut.AtEndOfStream
'		oTxtFileOut.WriteLine oExec.StdOut.ReadLine
'	Loop
'	oTxtFileOut.WriteBlankLines(1)

	Do Until oTxtFileIn.AtEndOfStream
		strLine = oTxtFileIn.ReadLine
		oExec.Stdin.WriteLine strLine
		WScript.Echo strLine
		WScript.Sleep(100)
'		Do Until oExec.StdOut.AtEndOfStream
'			oTxtFileOut.WriteLine oExec.StdOut.ReadLine
'		Loop
'		oTxtFileOut.WriteBlankLines(1)
	Loop
'	oTxtFileOut.Close

	WScript.Echo "読み込み終了"

	Set oTxtFileIn = Nothing
End Sub