使用VBScript从FTP下载多个文件

使用VBScript从FTP下载多个文件,vbscript,ftp,Vbscript,Ftp,我根本不是VB脚本方面的专家,但由于目前我的一个项目需要它,所以我正在尝试编写一个VBScript,它将从指定的FTP文件夹获取所有文件 我设法获取一个指定的文件,但似乎无法获取文件夹中的所有文件。以下是我尝试使用的脚本: Dim objOutStream Const OpenAsDefault = -2 Const FailIfNotExist = 0 Const ForReading = 1 Const ForWriting = 2 Set objFSO = Crea

我根本不是VB脚本方面的专家,但由于目前我的一个项目需要它,所以我正在尝试编写一个VBScript,它将从指定的FTP文件夹获取所有文件

我设法获取一个指定的文件,但似乎无法获取文件夹中的所有文件。以下是我尝试使用的脚本:

    Dim objOutStream
  Const OpenAsDefault = -2
  Const FailIfNotExist = 0
  Const ForReading = 1
  Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting, True, TristateFalse)
With objOutStream
    .WriteLine "USER myuser"   ' USERNAME
    .WriteLine "mypass"     ' Password
    .WriteLine "binary"
    .WriteLine "prompt n"
    .WriteLine "lcd /foldertocopyfrom" ' FOLDER I'm changing into
    .WriteLine "mget *"    ' Get all files with today's date in it
    .WriteLine "bye"
    .Close
End With

Set oFTPScriptShell = CreateObject("WScript.Shell")
oFTPScriptShell.Run "%comspec% /c FTP -n -s:" & "C:\temp\temp\empty.txt" & " " & "ftp.location.com", 0, True
它没有给我一个错误或任何东西,它基本上什么也不做(是的,我确信/foldertocopy from:-)中有文件)

有什么想法吗?很明显我遗漏了什么


谢谢

我编写了一个函数来为您执行此操作。您可以在此处阅读并检查其代码:


我编写了一个函数来为您执行此操作。您可以在此处阅读并检查其代码:


我尝试了您的解决方案,但必须进行一些小的修复才能使其正常工作:

  • 添加了显式选项(用于更好地检测未定义的变量)
  • 删除了TristateFalse参数
  • 由于交互模式已关闭,已删除切换后的
    提示
  • bye
    更改为
    quit
  • 在FTP命令中添加了-i参数
  • 另外,在脚本中使用FTP命令之前,我在命令行中测试了它
这是修改后的脚本

Option Explicit

Const ForWriting = 2

Dim objOutStream, objFSO, objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting, True)
With objOutStream
    .WriteLine "USER myuser"   ' USERNAME
    .WriteLine "mypass"     ' Password
    .WriteLine "binary"
    .WriteLine "lcd /foldertocopyfrom" ' FOLDER I'm changing into
    .WriteLine "mget *"    ' Get all files with today's date in it
    .WriteLine "quit"
    .Close
End With

Set objShell = CreateObject("WScript.Shell")
objShell.Run "%comspec% /c FTP -n -i -s:" & "C:\temp\temp\empty.txt" & " " & "ftp.location.com", 0, True

我尝试了您的解决方案,但必须进行一些小的修复以使其正常工作:

  • 添加了显式选项(用于更好地检测未定义的变量)
  • 删除了TristateFalse参数
  • 由于交互模式已关闭,已删除切换后的
    提示
  • bye
    更改为
    quit
  • 在FTP命令中添加了-i参数
  • 另外,在脚本中使用FTP命令之前,我在命令行中测试了它
这是修改后的脚本

Option Explicit

Const ForWriting = 2

Dim objOutStream, objFSO, objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting, True)
With objOutStream
    .WriteLine "USER myuser"   ' USERNAME
    .WriteLine "mypass"     ' Password
    .WriteLine "binary"
    .WriteLine "lcd /foldertocopyfrom" ' FOLDER I'm changing into
    .WriteLine "mget *"    ' Get all files with today's date in it
    .WriteLine "quit"
    .Close
End With

Set objShell = CreateObject("WScript.Shell")
objShell.Run "%comspec% /c FTP -n -i -s:" & "C:\temp\temp\empty.txt" & " " & "ftp.location.com", 0, True

请从ftp位置下载以下代码

Function FTPDownload(sSite, sUsername, sPassword, sRemotePath)
Const ForWriting = 2
Dim objOutStream, objjFSO, objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting, True)
With objOutStream
    .WriteLine sUsername   ' USERNAME
    .WriteLine sPassword     ' Password
    .WriteLine "binary"
    .WriteLine "cd /"& sRemotePath' FOLDER I'm changing into
    .WriteLine "mget *"    ' Get all files with today's date in it
    .WriteLine "quit"
    .Close
End With
Set objShell = CreateObject("WScript.Shell")
objShell.Run "%Comspec% /c FTP -i -s:" & "C:\temp\temp\empty.txt" & " " & sSite
End Function
注:例如


sSite:192.168.0.1

请从ftp位置下载以下代码

Function FTPDownload(sSite, sUsername, sPassword, sRemotePath)
Const ForWriting = 2
Dim objOutStream, objjFSO, objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutStream = objFSO.OpenTextFile("C:\temp\temp\empty.txt", ForWriting, True)
With objOutStream
    .WriteLine sUsername   ' USERNAME
    .WriteLine sPassword     ' Password
    .WriteLine "binary"
    .WriteLine "cd /"& sRemotePath' FOLDER I'm changing into
    .WriteLine "mget *"    ' Get all files with today's date in it
    .WriteLine "quit"
    .Close
End With
Set objShell = CreateObject("WScript.Shell")
objShell.Run "%Comspec% /c FTP -i -s:" & "C:\temp\temp\empty.txt" & " " & sSite
End Function
注:例如


sSite:192.168.0.1

您的.Run没有指定ftp命令文件的完整文件规范。事实上,我忘了在这里添加它,但这不会导致问题…lcd-更改本地工作目录;cd-更改远程工作目录。您是否以交互方式尝试了这些命令?是的,奇怪的是,当我在Windows Powershell中尝试我的命令,并执行cd导入时,它会显示“Command Successfull”,但当我执行“dir”命令时,它什么都不做。。。。只是停留在那里,被占用…更正,它首先给我:200端口命令成功150打开/bin/ls的ASCII模式数据连接,然后它什么也不做:(你的.Run没有指定ftp命令文件的完整文件规范。事实上,我忘了在这里添加它,但这并不是问题的原因…lcd-更改本地工作目录;cd-更改远程工作目录。你是否以交互方式尝试了这些命令?是的,奇怪的是,当我在Windows Powershell中尝试命令时,我使用了cd Im端口显示“Command Successfull”,但当我执行“dir”命令时,它什么也不做…只是停留在那里,被占用…更正,它首先给出:200端口命令Successfull 150打开/bin/ls的ASCII模式数据连接,然后它什么也不做:(我实际上也在命令行中尝试过,后来意识到由于服务器上的文件损坏,操作失败了。)受够了,我开发了一个控制台应用程序,它做同样的事情,但有日志记录等。不过,你的帖子实际上帮了我很多忙,谢谢!!!我实际上也在命令行中尝试过l、 后来意识到操作失败是因为服务器上有一个损坏的文件。受够了,我开发了一个控制台应用程序,它做同样的事情,但有日志记录等。你的帖子实际上帮了我很多,谢谢!!!