Выполните команду в командной строке, используя Excel VBA

30

У меня есть фиксированная команда, которую мне нужно передать в командную строку с помощью VBA, а затем выполнить команду. например "perl a.pl c:\temp"

следующая - это команда, которую я пытаюсь использовать, но она просто открывает командную строку и не запускает команду.

Call Shell("cmd.exe -s:" & "perl a.pl c:\temp", vbNormalFocus)

Пожалуйста, проверьте.

  • 2
    вам даже не нужно сначала открывать cmd.exe -> Shell () может передать ваши perl-аргументы прямо в perl.exe
Теги:
command-line

1 ответ

41
Лучший ответ

Параметр S ничего не делает сам по себе.

/S      Modifies the treatment of string after /C or /K (see below) 
/C      Carries out the command specified by string and then terminates  
/K      Carries out the command specified by string but remains  

Попробуйте что-то вроде этого

Call Shell("cmd.exe /S /K" & "perl a.pl c:\temp", vbNormalFocus)

Вам может даже не понадобиться добавить "cmd.exe" в эту команду, если вы не хотите, чтобы окно команды открывалось, когда оно запускается. Shell должна выполнить команду самостоятельно.

Shell("perl a.pl c:\temp")



-Edit -
Чтобы дождаться завершения команды, вам нужно будет сделать что-то вроде шоу @Nate Hekman в своем ответе здесь

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wsh.Run "cmd.exe /S /C perl a.pl c:\temp", windowStyle, waitOnReturn
  • 5
    Имейте в виду, что оболочка вернется после запуска процесса. Он не будет ждать завершения вашего Perl-Script, просто говоря.
  • 0
    Большое спасибо. это отлично работает Каков будет код «ждать завершения моего Perl-Script»?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню