街中で見かけて「グッときた人」の思い出

初めて投稿します。シェル、VBS共に知識が無く困っています。
UNIXからWindows2008の移行に伴い、シェルからVBSに変更しているのですがJP1の動作がうまくいかず困っています。
JP1のjr3bjsubコマンド自体はうまく動作しているのですが、ジョブが登録完了するまで待ってくれません・・・。
どうしたら良いかどなたかご存知であらば教えてください。

・シェルの内容

#!/sbin/sh
typeset -i CNT=1
if [ "$3" = "" ]
then
while [ $CNT -le 5 ]
do
/opt/jp1_am_r3/bin/jr3bjsub -jn $1 -pa $2 -rs -out LP01 -wait -time 900
RTN=$?
if [ $RTN -le 2 ]
then break
fi
CNT=$CNT+1
sleep 1
done
else
while [ $CNT -le 5 ]
do
/opt/jp1_am_r3/bin/jr3bjsub -jn $1 -pa $2 -var $3 -rs -out LP01 -wait -time 900
RTN=$?
if [ $RTN -le 2 ]
then break
fi
CNT=$CNT+1
sleep 1
done
fi
return $RTN

・動かそうとしているVBSの内容

'引数:実行先(-d) 
'曖昧な宣言を禁止
Option Explicit
'ERRが発生しても後続処理を続ける
On Error Resume Next

'変数/オブジェクト宣言
Dim objWshShell ' WshShell オブジェクト
Dim strCmdLine ' 実行するコマンド
dim args
dim rtn

'定数宣言/オブジェクト作成
Set args = WScript.Arguments
Set objWshShell = WScript.CreateObject("WScript.Shell")

'------------メイン処理START
If Err.Number = 0 Then

If args.Count < 2 Then
Err.Description = "引数が不足"
WScript.Echo "エラー: " & Err.Description

ElseIf args.Count = 2 Then
strCmdLine = "C:\Program Files (x86)\Hitachi\JP1AMR3\Program\jr3bjsub.exe -rs -out LP01 -wait -time 900 -jn " & args.item(0) & " -pa " & args.item(1)

ElseIf args.Count = 3 Then
strCmdLine = "C:\Program Files (x86)\Hitachi\JP1AMR3\Program\jr3bjsub.exe -rs -out LP01 -wait -time 900 -jn " & args.item(0) & " -pa " & args.item(1) & " -var " & args.item(2)

Else
Err.Description = "引数が多すぎます"
WScript.Echo "エラー: " & Err.Description
End if

objWshShell.Exec(strCmdLine)

If Err.Number = 0 Then
WScript.Echo strCmdLine & " を起動しました。"
End If

End If

'Set objWshShell = Nothing

よろしくお願いします。

A 回答 (1件)

非同期に実行してるからでは?


少なくとも(Shell.Exec)実行後のステータスはみないといけないでしょう(たぶん、それだけでは足りないだろうけど)
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBSを以下のように変更しましたが、コマンドの返り値を取得することが出来ません。

引き続き宜しくお願い致します。

'曖昧な宣言を禁止
Option Explicit
'ERRが発生しても後続処理を続ける
On Error Resume Next

'変数/オブジェクト宣言
Dim objWshShell ' WshShell オブジェクト
Dim strCmdLine ' 実行するコマンド
dim args
dim rtn

'定数宣言/オブジェクト作成
Set args = WScript.Arguments
Set objWshShell = WScript.CreateObject("WScript.Shell")

'------------メイン処理START
'パラメータ数チェック
If Err.Number = 0 Then
'引数が不足
If args.Count < 2 Then
Err.Description = "引数が不足"
WScript.Echo "エラー: " & Err.Description
'バリアントの無いジョブ実行用
ElseIf args.Count = 2 Then
strCmdLine = "C:\Program Files (x86)\Hitachi\JP1AMR3\Program\jr3bjsub.exe -rs -out LP01 -wait -time 900 -jn " & args.item(0) & " -pa " & args.item(1)
'バリアント指定のあるジョブ実行用
ElseIf args.Count = 3 Then
strCmdLine = "C:\Program Files (x86)\Hitachi\JP1AMR3\Program\jr3bjsub.exe -rs -out LP01 -wait -time 900 -jn " & args.item(0) & " -pa " & args.item(1) & " -var " & args.item(2)
'引数が多すぎる
Else
Err.Description = "引数が多すぎます"
WScript.Echo "エラー: " & Err.Description
End if
Set objExecCmd = objWshShell.Exec(strCmdLine)
If objExecCmd.ExitCode = 0 Then
WScript.Echo strCmdLine & " を起動しました。"
Do While objExecCmd.Status = 0
WScript.Sleep(1000)
Loop
ElseIf objExecCmd.ExitCode = 1 Then
WScript.Echo strCmdLine & " の処理が中止されました。"
ElseIf objExecCmd.ExitCode = 2 Then
WScript.Echo strCmdLine & " の終了監視処理がタイムアウトになりました。"
ElseIf objExecCmd.ExitCode >= 3 Then
WScript.Echo "コマンドが異常終了しました。"
End if
End If

Set objExec = Nothing
Set objWshShell = Nothing
'------------メイン処理START

お礼日時:2010/04/02 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!