Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA中的多行运行Shell命令/批处理文件_Vba_Excel_Batch File_Cmd - Fatal编程技术网

使用VBA中的多行运行Shell命令/批处理文件

使用VBA中的多行运行Shell命令/批处理文件,vba,excel,batch-file,cmd,Vba,Excel,Batch File,Cmd,我有2行,我必须每天在cmd运行多次。这些线条与下面的相似: set_someclasspaths.bat java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard 我想到了两种方法来实现自动化。第一个是批处理文件,第二个是发送密钥。我制作了一个文件,将其标记为something.bat并粘贴在上面两行。这会很快在cmd中

我有2行,我必须每天在cmd运行多次。这些线条与下面的相似:

set_someclasspaths.bat
java -Xmx1024m foo.bar.stuff.Dashboard -var varone -from 20160701 -to 20160731 -outputdir c:\stuff -ir @ -dashboard
我想到了两种方法来实现自动化。第一个是批处理文件,第二个是发送密钥。我制作了一个文件,将其标记为something.bat并粘贴在上面两行。这会很快在cmd中打开一个窗口,然后再次关闭,即使我在末尾添加了暂停,也不会执行我预期的操作-事实上,据我所知,它运行第一个命令,然后什么也不运行

send keys方法似乎只运行第一行,我尝试过:

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和批处理文件的情况下,我已经停下来了

为了澄清,我的问题有两个:第一,批处理文件是更好的方法吗?第二,为什么这不起作用

非常感谢您的帮助。

关于:

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
那么:

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

当您从另一个批处理文件调用一个批处理文件时,控件将传递给第二个批处理文件,并且不会返回

如果希望返回,则需要传入调用,因此批处理文件如下所示:

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

当您从另一个批处理文件调用一个批处理文件时,控件将传递给第二个批处理文件,并且不会返回

如果希望返回,则需要传入调用,因此批处理文件如下所示:

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

创建类似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创建批处理文件,只需单击按钮或其他东西即可执行批处理文件。

创建一个类似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创建批处理文件,只需在单击按钮或其他东西时执行即可