使用 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 的文件夹。
我正在使用 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 的文件夹。