2016-07-26 245 views
1

我有2行,我必須在cmd每天運行多次。這些線類似於下面的那些:從VBA運行多行Shell命令/批處理文件

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

我想過兩種方法來自動執行此操作。第一個是批處理文件,第二個是發送密鑰。我已經做了一個文件標記它的東西。巴特和粘貼在上述兩行。這很快就會在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的能力是值得懷疑的最好的,這似乎像整齊的方法來解決,這是批處理文件,所以我寧願這樣做。

我想我將參數傳遞給第二行的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

關於什麼:

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包裝批處理文件並粘貼兩個命令在那裏:

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

這應該執行這兩個批處理文件和你的Java語句,然後保持窗口打開。

不必一直通過VBA創建一個批處理文件,只需單擊按鈕或其他東西就可以執行它。