You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WScript Shell调用pscp上传FTP时,如何捕获错误输出?

解决pscp错误信息无法捕获的问题

我明白你的痛点——当用VBA调用pscp上传文件时,成功的输出能正常写入日志,但遇到像Fatal: Server unexpectedly closed network connection这类错误时,日志文件里啥都没有。这是因为你只捕获了标准输出流(stdout),而错误信息其实是输出到**标准错误流(stderr)**里的,默认的>重定向只会处理stdout。

解决方案:合并标准输出和错误输出

要同时捕获成功日志和错误信息,你需要在命令里加上2>&1,这个语法的意思是把stderr(编号2)的内容重定向到stdout(编号1)的同一个输出目标里。同时你之前的引号拼接也有语法错误,需要修正。

修改后的命令拼接代码应该是这样:

' 合并stdout和stderr到同一个文件,修正引号语法
strCommand = strCommand & " > ""C:\output.txt"" 2>&1"

完整的修改后代码片段

这里把修正后的关键部分整合到你的原代码里,还修复了几个小问题:

Dim wsh As Object
Dim waitOnReturn As Boolean
Dim windowStyle As Integer
Dim cstrSftp As String
Dim strCommand As String
Dim pUser As String
Dim pPass As String
Dim pHost As String
Dim pFile As String
Dim pRemotePath As String
Dim site As String
Dim resp As String

Set wsh = VBA.CreateObject("WScript.Shell")
waitOnReturn = True
windowStyle = 1

' 初始化变量,修复路径和密码的小问题
cstrSftp = """" & Application.ActiveWorkbook.Path & "\pscp.exe" & """"
site = "http://mysite/"
pUser = "user"
pPass = "password" ' 移除了末尾多余的空格,避免登录失败
pHost = "ftp.mysite"
pRemotePath = "/home/"
pFile = """" & Application.ActiveWorkbook.Path & "\file.png" & """" ' 补充路径分隔符\,避免路径拼接错误

' 构建基础上传命令
strCommand = "cmd /c echo n | " & cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & " " & pFile & " " & pHost & ":" & pRemotePath

' 新增:合并输出流到日志文件,同时捕获成功和错误信息
strCommand = strCommand & " > ""C:\output.txt"" 2>&1"

' 执行命令
wsh.Run strCommand, windowStyle, waitOnReturn

额外提示

  1. 原代码里pPass末尾多了一个空格,这可能导致登录认证失败,我已经帮你移除了;
  2. pFile的路径拼接缺少了路径分隔符\,会生成类似C:\WorkbookPathfile.png的错误路径,也已经修正。

这样修改后,不管上传成功还是失败,所有的输出(包括具体错误信息)都会写入到C:\output.txt里,你可以读取这个文件来判断上传状态,或者提取失败的具体原因。

内容的提问来源于stack exchange,提问作者Guilherme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:31