Script Batch de Windows con directivas FTP embebidas

En éste artículo ya había presentado un ejemplo sobre como crear un script DOS batch en Windows que ejecute directivas ftp.

Sin embargo dicho ejemplo tenía un problema, y era que requería de dos archivos, un archivo .txt con las directivas ftp y otro archivo .bat aparte que llamaba al comando ftp con la cadena de conexión y le pasaba el archivo .txt mencionado previamente. En definitiva, en éste artículo veremos que si es posible meter todo en un solo script batch de Windows.

Antes de comenzar tengo que decir que la solución es un tanto rebuscada la verdad, así que la explicación será más extensa de lo pensado.

Creación del script batch:

Para comenzar abrimos nuestro editor de texto plano favorito de Windows, Notepad, y a continuación le agregamos el siguiente contenido similar al que sigue:
;@echo off
;set LOCAL_PATH=C:\
;(for /f "usebackq delims=" %%A in ("%~f0") do call echo.%%A)>"%~n0.ftp"
;PAUSE > nul
;ftp -i -s:"%~n0.ftp"
;PAUSE > nul
;del "%~n0.ftp"
;GOTO:EOF

!:--- Datos de conexion a continuacion ---

open ip_servidor_ftp
usuario_ftp
contraseña_del_usuario

!:--- Directivas FTP a continuacion ---

binary

cd /archivos

lcd %LOCAL_PATH%\libros
mget libros/*
lcd %LOCAL_PATH%\revistas
mget revistas/*

bye

Como se puede observar más arriba el contenido es bastante extraño, y lo podemos subdividir en las siguientes secciones:
  • En la primera parte tenemos una serie de comandos batch que están iniciados con el signo de puntuación punto y coma (;).
  • La siguiente sección contiene los datos de conexión al servidor FTP, donde debemos especificar la dirección IP del servidor, el usuario con el cual nos vamos a conectar y su respectiva contraseña.
  • Y por último van las directivas ftp de cambios de directorio y copiado o manipulación de archivos que necesitamos realizar.
Para finalizar tenemos que guardar los cambios del archivo y cambiar la extensión del mismo a .bat. Con ello solo resta hacer doble clic en el archivo para ejecutar las directivas ftp que deseamos desde un solo archivo.

Explicación del funcionamiento:

Básicamente lo que hace este script al ejecutar el archivo .bat es que el intérprete de Windows ejecuta los primeros comandos batch que inician con los signos de puntuación punto y coma (;), que finalizan en la directiva GOTO:EOF que lleva al fin del archivo y termina con la ejecución de los comandos batch hasta ese punto.

En la segunda línea se define la variable de entorno LOCAL_PATH, y la misma debe ser modificado a la conveniencia de cada uno, ya que de ella depende la construcción de las directivas ftp que están al final del archivo (líneas 21 y 23).

En la tercera línea del script se ejecuta el comando batch for, que recorre el contenido del propio archivo .bat que se está ejecutando a fin de crear un archivo temporal que solo contenga las directivas ftp. Esto lo logra debido a que para el comando for el punto y coma (;) es considerado como fin de línea, motivo por el cual todas las directivas batch inicializadas con dicho carácter (;) son consideradas como líneas inválidas, y por ende no son copiadas al archivo temporal.

En la quinta línea básicamente se ejecuta el programa ftp y se le pasa como argumento el archivo temporal que en el paso anterior fue creado solo con las directivas ftp.

Finalmente en la séptima línea se elimina el archivo temporal y en la línea siguiente se termina la ejecución del script.

OBS: Quisiera aclarar que las directivas batch "PAUSE > nul" de las líneas 4 y 6 están para parar la ejecución del script, y facilitar el análisis de la ejecución de cada comando. En un entorno de producción dichas directivas deben ser borradas para evitar que el script quede esperando a que un operador presione alguna tecla para continuar o finalizar la ejecución del mismo.

Fuentes:

Comentarios