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

Calling BAT with VBA - CMD Loads and Closes Immediately

我正在使用 VBA 编写命令文件和调用 PLink 登录服务器的 BAT 文件和 运行 脚本。由于此处的一些帮助,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 识别为一个选项,将不胜感激

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