运行带有VBA多行的Shell命令/批处理文件

时间:2016-07-26 15:49:53

标签: vba excel-vba batch-file cmd excel

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

RewriteRule (.*) http://www.siteb.com/$1 [R=301,L]

我想到了两种自动化方法。第一个是批处理文件,第二个是发送密钥。我已经将一个文件标记为something.bat并粘贴在上面的两行中。这会在cmd中快速打开一个窗口并再次关闭(即使我在结尾处添加了暂停),并且没有做我所期望的事情,因为我可以告诉它运行第一个命令然后什么都没有。

发送密钥方法似乎只运行第一行,我试过:

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

我的批处理文件和java能力充其量是可疑的,似乎解决这个问题的最简单方法是批处理文件,所以我更愿意这样做。

我想我将参数传递给第二行的java脚本,我不确定是否有这种语法,并且没有学习一些java和批处理文件的东西我已经停止了。

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

非常感谢。

3 个答案:

答案 0 :(得分:3)

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

如果您希望返回,则需要传递b = rand(100); using Distributions indices = sample(1:1000, 100, replace=false) ## random indices for where the elements in a slice of the first dimension of A will match those in b. ## 2D example A = rand(1000,100); A[indices,1] = b; ## set 100 random rows of A will now have their first element match one element of b Ared = A[findin(A[:,1], b),:] ## find the rows in A where the first element is in B. Return the full values of those rows. ## 3D example A3 = rand(1000,10,100); A3[indices,1,1] = b; Ared3 = A3[findin(A[:,1,1], b),:,:]; julia> size(Ared3) (100,10,100) ,因此您的批处理文件将如下所示:

call

答案 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

答案 2 :(得分: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创建批处理文件,只需在单击按钮或其他内容时执行即可。