I am currently able to pass one argument from my Excel file to my batch file using the following:
filepath = \"C:\\Users\\agaron\\Desktop\\batchmaster\\batchfi
To provide multiple parameters to a batch file, separate them with spaces. If a parameter contains spaces on its own, enclose it in "" (this is also required for some other characters like ,, ;, =; use quotes also for the batch file path in case; the quotes might also be used for every parameter):
"C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" param1 param2 "param3 with spaces" ...
To access the parameters in the batch file, use the %# syntax, were # represents a single decimal digit (see call /? for details). Note that %0 returns the path of the batch file itself. To remove potential surrounding "", use %~#:
echo This batch file: %~0
echo First parameter: %~1
echo Second parameter: %~2
echo Third parameter: %~3
With the shift command, you shift the assignment of the %# numbers, for instance:
echo This batch file: %~0
shift
echo First parameter: %~0
echo Second parameter: %~1
shift
echo Third parameter: %~1
As you might have noticed, you cannot access the batch file path anymore after the first shift; the next shifts prevents the first parameter from being accessed, and so on (type shift /? for more information).
However, shift lets you access more than 9 parameters. For example, when calling the batch file with a command line like:
"C:\Users\agaron\Desktop\batchmaster\batchfiles\batchfiletest.bat" param1 param2 param3 ... param9 param10
you can access the parameters like:
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
As you can see, shift provides the possibility to access even more then 9 parameters.
Finally, let us call the batch file via the VBA code:
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)
Windows batch files get different parameters delimited by spaces. So if your batch file batchfiletest.bat is like:
echo off
echo %1
echo %2
echo %3
pause
then the following VBA should run properly:
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