用VBA调用BAT - CMD加载并立即关闭

时间:2015-05-06 16:48:58

标签: excel-vba cmd plink vba excel

我正在使用VBA编写命令文件和BAT文件,该文件调用PLink登录服务器并运行脚本。由于这方面的一些帮助,Plink部分现在正在按预期运行。不幸的是,VBA似乎在打开cmd和查找plink作为可用命令时遇到了一些困难。

我尝试了多种不同的方法来调用它,但结果都是一样的。 cmd提示符打开然后立即关闭,给出一个错误说明:

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

文件生成完美,如果我在VBA之外运行bat文件,它会按预期运行。有了这些文件,我在桌面上保留了一份plink.exe。我甚至尝试使用链接和plink.exe将cmd.exe的副本添加到桌面,但是我遇到了同样的问题。

以下是我尝试过的一些方法,虽然针对我的代码进行了修改: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识别为选项,那将非常感激

1 个答案:

答案 0 :(得分:0)

将路径传递到批处理文件中的plink.exe,或确保%Path%包含包含plink.exe的文件夹。