Как передать несколько переменных из файла Excel в пакетный файл

В настоящее время я могу передать один аргумент из моего файла Excel в свой пакетный файл, используя следующее:

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

после чего вызывается команда оболочки:

  Call Shell(filepath, vbNormalFocus) 

Это прекрасно работает. Тем не менее, теперь я должен передать не один, а 18 параметров, используя вышеуказанный метод. Я попытался конкатенировать с помощью & но кажется, что командный файл распознает все параметры как один.

Как передать дополнительные параметры из Excel в пакетный файл?

Пакетные файлы 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 

Чтобы предоставить несколько параметров пакетному файлу, разделите их пробелами. Если параметр содержит пробелы сам по себе, заключите его в "" (это также необходимо для некоторых других символов, таких как,, ; , = ; использовать кавычки также для пути пакетного файла в случае, кавычки также могут использоваться для каждого параметра ):

 "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) 
  • Каковы возможные способы передачи файла с более чем 100 МБ, созданного с помощью сценария оболочки, на любой URL или сервер?
  • Требуется ли путь к файлу (функция оболочки) VBA?
  • Как вызвать диалоговое окно «Добавление цифровой подписи» в Excel VBA
  • сценарий оболочки, чтобы проверить, запущен ли сайт и заполнить листок excel
  • Excel VBA Подождите, пока Shell закончит работу, прежде чем продолжить сценарий
  • Как объединить несколько листов excel в отдельный лист Excel с вкладками?
  • Ошибка Excel VB в QTP 11
  • Приложение Excel VBA Open с использованием оболочки, затем дождитесь, пока он откроется, чтобы продолжить выполнение команд
  • Понимание возвращаемого значения из функции оболочки
  • Объявить функцию Excel Vba с помощью shell32.dll
  • Выполнить AutoIt и ждать окончания
  • Давайте будем гением компьютера.