cHl Security Ответов: 3

Как загрузить файл в каталог FTP-сервера с помощью vbscript?


Я пытаюсь сделать vbscript для загрузки файлов в удаленный каталог ftp, после запуска скрипта и проверки каталога я обнаружил, что ожидаемый файл не загружается.

Я работаю над этим уже несколько часов, и я не могу исправить это сам. Я был бы признателен за решение этой проблемы.

Что я уже пробовал:

Set oShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim path As String
LocalPath = Environ("HOMEPATH") & "\AppData\Roaming\source1\"

'Path to file or folder to upload
path = LocalPath & "filescopy.txt"

intMaxAttempt = 5
intCurAttempt = 0
boolSuccess = False

Do While Not boolSuccess
    intCurAttempt = intCurAttempt + 1

    If intCurAttempt > intMaxAttempt Then
        Set objFile = objFSO.OpenTextFile(LocalPath & "log.txt", 8, True) ' 8=append, 2=overwrite
        objFile.WriteLine(path & " did NOT upload successfully on " & Now)
        objFile.Close

        Exit Do
    End If

    boolSuccess = FTPUpload(path)

    If boolSuccess Then

        If objFSO.FileExists(path) Then
            objFSO.DeleteFile path
        End If

        If objFSO.FolderExists(path) Then
            Set objFolder = objFSO.GetFolder(path)
            For Each strFile In objFolder.Files
                objFSO.DeleteFile strFile
            Next
        End If

        Set objFile = objFSO.OpenTextFile(LocalPath & "log.txt", 8, True) ' 8=append, 2=overwrite
        objFile.WriteLine(path & " uploaded successfully on " & Now)
        objFile.Close

        Exit Do
    Else

    End If  
Loop




Function FTPUpload(path)
    FTPUpload = True

    On Error Resume Next

    'Copy Options: 16 = Yes to All
    Const copyType = 16

    'FTP Wait Time in ms
    waitTime = 80000

    FTPUser = "User"
    FTPPass = "Pass"
    FTPHost = "host.com"
    FTPDir = "/"

    strFTP = "ftp://" & FTPUser & ":" & FTPPass & "@" & FTPHost & FTPDir
    Set objFTP = oShell.NameSpace(strFTP)

    'Make new folder on FTP site
    'objFTP.NewFolder "FTP Backup"


    'Upload single file      
    If objFSO.FileExists(path) Then

        Set objFile = objFSO.getFile(path)
        strParent = objFile.ParentFolder
        Set objFolder = oShell.NameSpace(strParent)

        Set objItem = objFolder.ParseName(objFile.Name)

        Wscript.Echo "Uploading file " & objItem.Name & " to " & strFTP
         objFTP.CopyHere objItem, copyType

    End If

    'Upload all files in folder
    If objFSO.FolderExists(path) Then

        'Code below can be used to upload entire folder
        Set objFolder = oShell.NameSpace(path)

        Wscript.Echo "Uploading folder " & path & " to " & strFTP
        objFTP.CopyHere objFolder.Items, copyType

    End If


    If Err.Number <> 0 Then
        Wscript.Echo "Error: " & Err.Description
        FTPUpload = False
    End If

    'Wait for upload
    WScript.Sleep waitTime
End Function


Когда я использовал этот код, я получаю путь не найден.

Richard MacCutchan

Вам нужно добавить некоторый отладочный код к вашему сценарию, чтобы узнать, что происходит при его запуске. Люди здесь не могут догадаться, что происходит.

cHl Security

Я получаю ошибку:
Хост Winscript"

Ошибка: Требуется Объект

Richard MacCutchan

Сколько раз вам нужно увидеть эту ошибку, прежде чем вы что-то с ней сделаете? Это ясно говорит вам, что CreateObject("Shell.Application") это неудача, поэтому вам нужно исследовать, почему.

cHl Security

Я обновил вопрос. Как бы проверить, пожалуйста

3 Ответов

Рейтинг:
2

MadMyche

Не ответ на вашу проблему, но что-то, что поможет вам выяснить, в чем заключается настоящая проблема. В вашем коде есть замечательная строка On Error Resume Next который подавляет остановку скрипта в точке сбоя и позволяет выполнять обработку ошибок для этой ошибки, используя свойства Err.

Однако ваш код не использует Ошибаться и поэтому вы не узнаете, в чем проблема. У меня был бы соблазн прокомментировать это В Резюме Об Ошибке Следующий а затем попробуйте программу, чтобы увидеть, есть ли какие-либо ошибки.

Рекомендации:
vbscript - что делает оператор "On Error Resume Next"? - переполнение стека[^]
Оператор On Error - Visual Basic | Microsoft Docs[^]


cHl Security

Я получаю ошибку:
Хост Winscript"

Ошибка: Требуется Объект

MadMyche

По какой линии? Вы занимались устранением неполадок, почему это происходит?

cHl Security

Он не давал ошибки предписания ни из одной строки. Он просто заявил, что ошибка: требуется объект. Глядя глубоко в код, когда я добавил опцию Explicit в начало кода. У меня есть это
https://prnt.sc/r2ylgi

И через некоторое время это проявилось снова:
https://prnt.sc/r2ym10

Когда я нажал кнопку ОК на загружаемом изображении я снова получил это приглашение:
https://prnt.sc/r2ymdp

Рейтинг:
2

Patrice T

Цитата:
Он не давал ошибки предписания ни из одной строки.

Первая картинка гласит: Строка 7 и запуск кода с помощью отладчика привел бы к ошибке.
Судя по вашему коду, это так:
Set oShell = CreateObject("Shell.Application")


Цитата:
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Visual Basic / Visual Studio Video Tutorial - Базовая Отладка - YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и средства отладки[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


cHl Security

Я обновил код после отладки, теперь я получаю путь не найден. Пожалуйста, помогите мне

Richard MacCutchan

Откуда вы берете "путь не найден", о каком пути идет речь? Пожалуйста, приложите усилия, чтобы предоставить надлежащую информацию; никто здесь не может видеть ваш экран или читать ваши мысли.

Patrice T

Как уже было сказано, отладчик покажет вам, где происходит ошибка (номер строки)

Рейтинг:
1

cHl Security

На нем ничего не было видно. Я ценю любую форму помощи дирета от вас.