如何将多个变量从Excel文件传递到批处理文件

时间:2015-10-31 07:31:44

标签: excel shell batch-file

我目前能够使用以下内容将一个参数从我的Excel文件传递到我的批处理文件:

 filepath = "C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat " & month

然后调用shell命令:

    Call Shell(filepath, vbNormalFocus)

这很好用。但是,我现在要求使用上述方法不仅传递一个参数,而且传递18个参数。我尝试使用&连接,但似乎批处理文件将所有参数识别为单个参数。

如何将更多参数从Excel传递到批处理文件?

2 个答案:

答案 0 :(得分:1)

Windows批处理文件获取由空格分隔的不同参数。因此,如果您的批处理文件batchfiletest.bat如下:

echo off
echo %1
echo %2
echo %3
pause

然后以下VBA应该正常运行:

Sub testBatch()
 sMonth = Format(Now, "mmmm")
 sDay = Format(Now, "dd")
 sYear = Format(Now, "yyyy")
 filepath = "C:\Users\axel\batchfiletest.bat " & sMonth & " " & sDay & " " & sYear
 Shell filepath, vbNormalFocus
End Sub

答案 1 :(得分:0)

要为批处理文件提供多个参数,请用空格分隔它们。如果参数自身包含空格,请将其括在""中(对于,;=等其他字符也需要这样做;也可以使用引号批处理文件路径以防;引号也可用于每个参数):

"C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" param1 param2 "param3 with spaces" ...

要访问批处理文件中的参数,请使用%#语法,#表示单个十进制数字(有关详细信息,请参阅call /?)。请注意,%0返回批处理文件本身的路径。要删除潜在的"",请使用%~#

echo This batch file: %~0
echo First  parameter: %~1
echo Second parameter: %~2
echo Third  parameter: %~3

使用shift命令,您可以移动%#数字的分配,例如:

echo This batch file: %~0
shift
echo First  parameter: %~0
echo Second parameter: %~1
shift
echo Third  parameter: %~1

您可能已经注意到,在第一个shift之后,您无法再访问批处理文件路径;下一个班次会阻止访问第一个参数,依此类推(类型shift /?以获取更多信息)。

但是,shift允许您访问9个以上的参数。例如,使用如下命令行调用批处理文件时:

"C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" param1 param2 param3 ... param9 param10

您可以访问以下参数:

echo This batch file: %~0
echo Parameter  1: %~1
shift
echo Parameter  2: %~1
shift
echo Parameter  3: %~1
:: ...
shift
echo Parameter  9: %~1
shift
echo Parameter 10: %~1

如您所见,shift提供了访问超过9个参数的可能性。

最后,让我们通过VBA代码调用批处理文件:

filepath = Chr(&H22) & "C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" & Chr(&H22) _
    & " " & variable_containing_param1 _
    & " " & "param2" _
    & " " & Chr(&H22) & "param3 with spaces" & Chr(&H22)
Call Shell(filepath, vbNormalFocus)