我目前能够使用以下内容将一个参数从我的Excel文件传递到我的批处理文件:
filepath = "C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat " & month
然后调用shell命令:
Call Shell(filepath, vbNormalFocus)
这很好用。但是,我现在要求使用上述方法不仅传递一个参数,而且传递18个参数。我尝试使用&
连接,但似乎批处理文件将所有参数识别为单个参数。
如何将更多参数从Excel传递到批处理文件?
答案 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)