- 締切済み
初めて投稿します。シェル、VBS共に知識が無く困っています。
初めて投稿します。シェル、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 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- necomimi
- ベストアンサー率41% (633/1540)
非同期に実行してるからでは? 少なくとも(Shell.Exec)実行後のステータスはみないといけないでしょう(たぶん、それだけでは足りないだろうけど)
お礼
ありがとうございます。 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