Yo no soy en absoluto un experto en VB de secuencias de comandos, pero ya que es un requisito en uno de mis proyectos, por el momento, estoy tratando de escribir un VBScript que OBTENER todos los archivos de una determinada Carpeta FTP.

Me las arreglo para conseguir un único archivo especificado, pero me parece que no puede obtener todos los archivos en una carpeta. Aquí está el script que estoy tratando de usar:

    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

Que no me da error ni nada, básicamente no hace nada (y sí, estoy seguro de que hay archivos en el /foldertocopy de :-))

Alguna idea? Algo obvio que me estoy perdiendo?

Gracias!

  • Tu .Ejecutar no especificar el archivo de especificaciones de su comando ftp de archivos.
  • De hecho, me olvidé de agregar aquí, sin embargo, esto no causa el problema…
  • lcd – cambiar el directorio de trabajo local; cd – cambiar el directorio de trabajo remoto. ¿Pruebe los comandos de forma interactiva?
  • sí, lo extraño es que cuando trato de mi comandos de Windows Powershell, y yo hacemos la Importación de cd dice «Comando Exitoso», pero cuando hago un comando «dir», de no hacer nada…. se queda allí, siendo ocupada…
  • Corrección, me da primero: 200 comandos del PUERTO de exito Apertura de 150 ASCII Modo de conexión de datos para los /bin/ls, no hace nada 🙁
  • Suena a un problema con el cortafuegos; probablemente hay un firewall o router NAT entre el cliente y el servidor FTP. Usted necesita un cliente de ftp que soporta «modo pasivo»; por desgracia, la línea de comandos de Windows cliente de FTP no admite el modo pasivo. Tal vez usted puede utilizar la conexión Chilkat componente FTP para descargar archivos (chilkatsoft.com/chilkatftp.asp); secuencias de comandos de ejemplo: example-code.com/vbscript/ftp.asp .

InformationsquelleAutor Nathan | 2012-02-14

3 Comentarios

  1. 3

    He intentado la solución, pero había que hacer un par de pequeñas correcciones para que funcione:

    • Añadida la Opción Explícita (para una mejor detección de las variables no definidas)
    • Quitado el TristateFalse parámetro
    • Eliminado prompt desde alternar desde el modo interactivo ya está fuera
    • Cambiado bye a quit
    • – Agregó -, yo parámetro para el comando FTP
    • Además he probado el comando FTP en la línea de comandos antes de usarlo en tu script

    Aquí está la secuencia de comandos modificada

    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
    • De hecho, me la probé en la línea de comandos así, y me di cuenta después de que la operación ha fallado debido a un archivo corrupto en el servidor.. Siendo alimentados con ello he desarrollado una aplicación de consola que hace la misma cosa, pero tiene el registro de etc en ella. Tu post tiene realmente me ayudó mucho, aunque, gracias!!!
  2. 0

    A continuación encontrará código para la descarga de ftp ubicación.

    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

    Nota por ejemplo,

    sSite : 192.168.0.1

Dejar respuesta

Please enter your comment!
Please enter your name here