2012-02-14 5 views
0

Я не являюсь экспертом в VB Scripting, но поскольку это требование в одном из моих проектов на данный момент, я пытаюсь написать VBScript, который будет ПОЛУЧИТЬ все файлы из указанную FTP-папку.Загрузите несколько файлов с FTP с помощью VBScript

Мне удается получить один указанный файл, но я не могу получить все файлы в папке. Вот сценарий, я пытаюсь использовать:

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 от: -))

Любые идеи? Что-то очевидное мне не хватает?

Спасибо!

+0

Ваш .run не определяет полный файл спецификации вашего командного файла FTP. –

+0

Действительно, я забыл добавить его здесь, но это не вызывает проблемы ... – Nathan

+0

lcd - изменить * локальный * рабочий каталог; cd - изменить * удаленный * рабочий каталог. Вы пытались выполнить команды в интерактивном режиме? –

ответ

3

Я попробовал ваше решение, но пришлось сделать пару небольших исправлений, чтобы сделать его работу:

  • Добавлено Option Explicit (для лучшего обнаружения не определено переменные)
  • Удален параметр TristateFalse
  • Удалены prompt, так как переключатель, так как интерактивный режим уже выключен
  • Изменено bye к quit
  • Добавлено -i параметр команды FTP
  • Plus Я проверил свой FTP команду в командной строке перед его использованием в сценарии

Вот Измененный скрипт

Option Explicit 

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 "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 
+0

Я действительно попробовал это в командной строке, а потом понял, что операция завершилась неудачно из-за поврежденного файла на сервере. Будучи сыт по горло, я разработал консольное приложение, которое делает то же самое, но имеет журнал и т. Д. в этом. Ваше сообщение действительно помогло мне много, хотя, спасибо !!! – Nathan

0

Ниже вы найдете код для загрузки из 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

Смежные вопросы