Вызов BAT с помощью VBA — CMD загружается и немедленно закрывается

Я использую VBA для написания командного файла и файла BAT, который вызывает PLink для входа на сервер и запуска сценария. Часть Plink теперь работает, как и ожидалось, благодаря некоторой помощи здесь. К сожалению, VBA, похоже, испытывает некоторые трудности с открытием cmd и поиском plink в качестве пригодной для использования команды.

Я пробовал несколько разных способов вызвать его, но результаты все те же. Приглашение cmd открывается, а затем сразу же закрывается, выдавая мне сообщение об ошибке:

"plink is not recognized as an internal or external command, operable program, or batch file."

Файлы генерируются отлично, и если я запускаю файл bat вне VBA, он работает, как и ожидалось. Вместе с файлами я храню копию plink.exe на рабочем столе. Я даже пытался добавить копию cmd.exe на рабочий стол со ссылками и plink.exe, но у меня та же проблема.

Вот некоторые из способов, которые я пробовал, хотя и были изменены для моего кода: is-not-working">1 2 3

Вот самый последний код макроса:

Dim vPath As String
Dim vscript As String

UserID = Range("F1").Value
Passwd = Range("F2").Value
Server = Range("F3").Value
StartDate = Range("F4").Value
EndDate = Range("F5").Value

Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\Program Files (x86)\PuTTY\plink.exe", "C:\Users\MikeDesktop\"
'fso.CopyFile "C:\Windows\System32\cmd.exe", "C:\Users\Mike\Desktop\"

vPath = "C:\Users\Mike\Desktop"
Open vPath & "\pcmd.txt " For Output As #1
Print #1, "cd /opt/test/srt"
Print #1, "./srt.tool " & StartDate & " " & EndDate & " > /opt/test/srt/test.txt &"
Print #1, "rm test.txt"
Print #1, "sleep 60; exit"
Close #1

Open vPath & "\Chg.bat" For Output As #1
Print #1, "plink " & UserID & "@" & Server & " -pw " & Passwd & " < " & vPath & "\pcmd.txt"
Close #1
vscript = vPath & "\Chg.bat"

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

wsh.Run vscript, windowStyle, waitOnReturn

Application.Wait (Now + TimeValue("0:01:00"))
Kill vPath & "\Chg.bat"
Kill vPath & "\pcmd.txt"
Kill vPath & "\plink.exe"

Если кто-то может сказать мне, почему cmd не распознает plink как вариант, я был бы очень признателен.


person Mikel1256    schedule 06.05.2015    source источник
comment
Вы пытались включить полный путь к plink вместо того, чтобы полагаться на то, что он находится на %Path%?   -  person FreeMan    schedule 06.05.2015


Ответы (1)


Либо передайте путь к plink.exe в пакетном файле, либо убедитесь, что %Path% включает папку, содержащую plink.exe.

person Giordano    schedule 06.05.2015
comment
Добавление пути в пакетный файл исправило это. Странно, что это все еще работало, когда я просто дважды щелкнул BAT-файл вне макроса, но без него в макросе это не сработает. Спасибо! - person Mikel1256; 06.05.2015