如何将多个variables从Excel文件传递到batch file
我目前能够从我的Excel文件传递一个参数到我的batch file使用以下内容:
filepath = "C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat " & month
接着调用一个shell命令:
Call Shell(filepath, vbNormalFocus)
这工作正常。 但是,我现在需要通过不只一个,但使用上述方法18个参数。 我尝试使用&
连接&
但似乎batch file将所有参数识别为单个文件。
我怎样才能将更多的参数从Excel传递到batch file?
Windowsbatch file获取由空格分隔的不同参数。 所以如果你的batch filebatchfiletest.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
要为batch file提供多个参数,请用空格分隔它们。 如果一个参数本身包含空格,则将其括在""
(对于其他字符也是这样,
,, ;
, =
;对于batch filepath,也使用引号);引号也可以用于每个参数):
"C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" param1 param2 "param3 with spaces" ...
要访问batch file中的参数,请使用%#
语法,其中#
表示单个十进制数字(有关详细信息,请参阅call /?
)。 请注意, %0
返回batch file本身的path。 要删除潜在的周围""
,使用%~#
:
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
之后,您将无法再访问batch filepath; 接下来的转移防止第一个参数被访问,等等(键入shift /?
获取更多信息)。
但是, shift
可以让你访问9个以上的参数。 例如,当使用命令行调用batch file时,如:
"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代码调用batch file:
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)