【问题标题】:I want to delete files from SFTP folder using VBScript我想使用 VBScript 从 SFTP 文件夹中删除文件
【发布时间】:2017-03-20 18:43:54
【问题描述】:

我写了一些代码,但没有工作,请建议我如何处理。

Function SFTPDelete(SFtpServerName, SFtpUser, SFtpPassword, LocalFolderPath, SFTPOutFolderPath)
    On Error Resume Next
    Dim mydate, mmddyyyy, sFTPScript, rc
    Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")
    Set oFTPScriptShell = CreateObject("WScript.Shell")
    rc = micPass
    mydate = Date - 1
'    mmddyyyy = Right("00" & Month(mydate),2) &"-"& Right("00" & Day(mydate),2) & "-" & CStr(Year(mydate))

    sFTPScript = sFTPScript & "option batch on" & vbCrLF
    sFTPScript = sFTPScript & "option confirm off"& vbCrLf
    sFTPScript = sFTPScript & "option transfer binary" & vbCrLf
    sFTPScript = sFTPScript & "open sftp://" & SFtpUser & ":" & SFtpPassword & "@" & SFtpServerName & vbCrLf
    sFTPScript = sFTPScript & "cd " & SFTPOutFolderPath  & vbCrLf
    sFTPScript = sFTPScript & "delete" & SFTPOutFolderPath & vbCRLf
    sFTPScript = sFTPScript & "close" & vbCrLf
    sFTPScript = sFTPScript & "exit" & vbCrLf

    sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")
    sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName

    'Write the input file for the sftp command to a temporary file.
    Set oFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)
    oFTPScript.WriteLine(sFTPScript)
    oFTPScript.Close
    Set oFTPScript = Nothing

    sCmd = """C:\Program Files (x86)\WinSCP\winscp.exe""  /console /log=" & LocalFolderPath & "log_winscp_get_files.log /loglevel=1 -script=" & sFTPTempFile
    oFTPScriptShell.Run sCmd

    Wait 10
    If Err.Number <> 0 Then
        Reporter.ReportEvent micFail, "Error occured while delete file from FTP location ["& SFTPOutFolderPath&"] "
        rc = micFail
    Else
        'oFTPScriptFSO.DeleteFile(LocalFolderPath&"log_winscp_get_files.log")
    End If

    ' Get rid of temp file used for input to sftp
    oFTPScriptFSO.DeleteFile(sFTPTempFile)

    Set oFTPScriptFSO = Nothing
    Set oFTPScriptShell = Nothing
    SFTPDownload = rc
End Function

请让我知道我需要做哪些更改。

【问题讨论】:

  • 调试 VBScript 的第一步:删除 On Error Resume Next 并实际查看问题所在。然后解释您的代码如何确切地“不工作”。你期望它做什么?它实际上是做什么的?它会引发什么错误?
  • “不工作”是什么意思?它有什么作用?是否创建了日志文件?它显示了什么?

标签: vbscript sftp winscp


【解决方案1】:

你的问题很模糊。

但至少有两个明显的问题:

  • WinSCP 中没有delete 命令。有rm command
  • delete 命令后缺少一个空格(应该是rm 命令)。
  • rm/delete 命令中的路径对于cd 命令来说是多余的,实际上会删除文件夹本身。如果您只想删除文件夹中的文件,请使用 * 掩码:

    sFTPScript = sFTPScript & "rm *" & vbCRLf
    
  • 您缺少-hostkey switch in the open commandverify server hostkey

【讨论】:

  • 实际上我正在尝试从 SFTP 目录中删除一个文件。能够连接到该目录,但收到未知命令“删除/ESB/UAT/ClaimApplicatie/Out/*”的未知命令之类的错误。删除 aldo 相同的错误。
  • 我们知道您正在尝试删除文件。你为什么要重复这个?您是否觉得我的回答与此相矛盾?无论如何,你也缺少一个空间。请参阅我编辑的答案。
  • 嗨 Martin Prikry,非常感谢您提供宝贵的解决方案。当我使用您当时提供的命令执行相同的脚本时,SFTP 服务器中可用的外文件夹也得到了已删除。但对于我的要求,只有该文件夹中可用的文件应该被删除。所以你能建议我怎么做。
  • 嗨 Martin Prinky,非常感谢您在这方面的帮助。现在这工作正常。如果我想计算该文件夹中有多少文件,是否有任何命令。如果有什么问题,请给我建议。再次感谢您的帮助。
  • 我正在使用 Windows 服务器
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多