script pause example batch bat automatic excel vba cmd winscp

excel - pause - Usando VBA para ejecutar script WinSCP



winscp script pause (2)

Puedo descargar archivos de SFTP en la ventana de CMD , usando el siguiente código:

WinSCP.com # Connect to the host and login using password open user:pw@address # get all the files in the remote directory and download them to a specific local directory lcd C:/Users/xx/Desktop get *.xlsx # Close and terminate the session exit

Busqué en línea y descubrí que puedo poner estos códigos en un archivo bat y usar

Call Shell("cmd.exe /c C:/Users/xx/Desktop/WinSCPGet.bat", 1)

Sin embargo, solo se está ejecutando la primera línea del archivo bat WinSCP.com . Aparecerá la ventana de cmd , mostrando esto, sin hacer nada más.

¿Cómo ejecutar todas las líneas a la vez?

Gracias


El código que tienes no es un archivo por lotes de Windows. Es un comando de Windows seguido de los comandos de WinSCP. El primer comando ejecuta la aplicación winscp.com , que luego se sienta y espera la entrada. Si finalmente lo cierra, el intérprete de comandos de Windows ( cmd.exe ) continuará ejecutando los comandos restantes, fallando la mayoría, ya que no son comandos de Windows. Consulte también Script WinSCP que no se ejecuta en el archivo por lotes .

Por lo tanto, debe guardar los comandos ( open para exit ) a un archivo de script WinSCP (digamos script.txt ) y ejecutar el script usando el script.txt /script :

Call Shell("C:/path/winscp.com /ini=nul /script=c:/path/script.txt")

Alternativamente, especifique todos los comandos en la línea de comandos de WinSCP, usando el modificador /command :

Call Shell("C:/path/winscp.com /ini=nul /command ""open user:pw@address"" ""lcd C:/Users/xx/Desktop"" ""get *.xlsx"" ""exit""")

En cuanto a las comillas: con el /command , debe adjuntar cada comando a comillas dobles. En cadena VBA, para usar una comilla doble, debe escapar duplicando.

También tenga en cuenta que generalmente debe usar el /ini=nul para aislar la ejecución del script de WinSCP de su configuración de WinSCP . De esta manera, también puede asegurarse de que la secuencia de comandos se ejecutará en otras máquinas. Su secuencia de comandos no, ya que carece del interruptor de la tecla -hostkey para verificar la huella digital de la clave de host SSH . Usar /ini=nul te ayudará a darte cuenta de eso.

Puede hacer que WinSCP GUI genere una línea de comandos completa (incluida la -hostkey ) para usted.

Consulte también Automatización de transferencias de archivos al servidor SFTP con WinSCP .


Me gusta este procedimiento pequeño y compacto, y lo uso en mis propios proyectos. No se requieren archivos temporales. Rápido y confiable.

Parse una cadena src (una uploadImageByFTP archivo absoluta) para uploadImageByFTP . Etc. C: / Users / user / Desktop / image.jpg, y el archivo se cargará.

Reemplazar:

  • <username> con usuario FTP
  • <password> con FTP-Contraseña
  • <hostname> con nombre de host FTP (etc. example.com)
  • <WinSCP.com path> con ruta en su cliente WinSCP (etc. C: / Archivos de programa (x86) / WinSCP / WinSCP.com. Precaución : WinSCP.com y no WinSCP.exe )
  • <FTP-path> con ruta en su cliente FTP (etc. / httpdocs / wp-content / uploads)

-

Sub uploadImageByFTP(src As String) Dim script As Object: Set script = VBA.CreateObject("WScript.Shell") Dim waitOnReturn As Boolean: waitOnReturn = True Dim windowStyle As Integer: windowStyle = 1 ''Not empty If (src <> vbNullString) Then ''Execute script script.Run _ """<WinSCP.com path>"" " + _ "/ini=nul " + _ "/command " + _ """open ftp://<username>:<password>@<hostname>/"" " + _ """cd <FTP-path>"" " + _ """put " & """""" & src & """""" & """ " + _ """close"" " + _ """exit""", windowStyle, waitOnReturn End If End Sub

-

WScript.Shell es más poderoso que el Shell() predeterminado, ya que puede agregar un waitOnReturn ; esto le dice a VBA, que no se permite la ejecución adicional antes de que los archivos se hayan cargado al servidor FTP.

Cambie windowStyle a 0, si no desea que el símbolo del sistema se abra en cada ejecución.