2016-07-26 16 views
1

私はcmdを毎日複数回実行する必要がある2行を持っています。次のような行があります。実行VBAの複数の行を含むシェルコマンド/バッチファイル

set_someclasspaths.bat 
java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard 

私はこれを自動化する2つの方法を考えていました。最初はバッチファイルで、2番目は送信キーです。私はそれを何かというラベルの付いたファイルにしました。上記の2つの行に貼って貼り付けました。これはすぐにcmdでウィンドウを開き、もう一度閉じます(たとえ私が最後に一時停止を追加しても)、最初のコマンドを実行してから何もしないと言うことができる限り、私は期待していたことをしません。

送信キー方式は、最初の行のみを実行しているようだ、私が試してみました:

Sub testcreate() 
Dim wsh As Object 
Set wsh = VBA.CreateObject("WScript.Shell") 
Dim waitOnReturn As Boolean: waitOnReturn = True 
Dim windowStyle As Integer: windowStyle = 1 

wsh.Run "cmd.exe /K C:\a\b\set_someclasspaths.bat", windowStyle, waitOnReturn 
wsh.sendkeys "java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard" 
End Sub 

私のバッチファイルとJavaの能力はせいぜい疑わしいですこれを解決するための滑らかな印象の方法があるように、それが思われますバッチファイル、私はそれを行うことを好むだろう。

私は、2番目の行のjavaスクリプトにパラメータを渡していると思いますが、これに構文があるかどうかわかりませんし、Javaとバッチファイルの内容を学習していないと、

明確にするために、私の質問は二つあります:まず、バッチファイルはこれを行うより良い方法ですか?次に、なぜこれが機能していないのですか?

大変助けになりました。

答えて

3

、制御は、第二に渡され、それは戻りません。

あなたはそれを返したい場合、あなたはあなたのバッチファイルは次のようになりますので、callに合格する必要があります。

call set_someclasspaths.bat 
java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard 
1

は何について:あなたは別の1つのバッチファイルを呼び出すと

Sub CreateAndRun() 

Dim batchContents As String 
Dim batchFile  As String 
Dim FF   As Byte 

batchFile = Environ$("USERPROFILE") & "\temp.bat" 

batchContents = "CALL set_someclasspaths.bat" & vbCrLf & _ 
       "java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard" 

FF = FreeFile 

Open batchFile For Output As #FF 
    Print #FF, batchContents 
Close #FF 

CreateObject("WScript.Shell").Run batchFile, 1, True 

DoEvents 

Kill batchFile 

End Sub 
1

はwrapper.batのようなラッパーバッチファイルを作成し、2つのコマンドを貼り付けます

call set_someclasspaths.bat 
java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard 
pause 

これは、バッチファイルとjava文の両方を実行して、ウィンドウを開いたままにしておく必要があります。

VBAでバッチファイルを作成する代わりに、ボタンをクリックするだけでバッチファイルを実行できます。

関連する問題