如何将多个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)