2011-03-02 28 views
11

Tengo un script por lotes que crea dinámicamente algunos archivos y genera cuatro archivos con nombres de archivo algo aleatorios basados ​​en la hora, fecha, etc. Luego necesita cargar ese archivo a un servidor a través de FTP.¿Es posible pasar una variable a un archivo de script FTP de Windows?

En este momento, mi archivo .bat tiene una línea como "ftp -s: ftp.txt". Ftp.txt contiene algunas cosas script FTP bastante sencillo: algo así-

open ftp.myserver.com 
username 
password 
put filename1.dat 
put filename2.dat 
put filename3.dat 
put filename4.dat 

Lo que me gustaría hacer es pasar en los nombres de archivos que necesitan ser cargados y luego vuelva a colocar el "poner filename1.dat" con "put% file1%" - donde% file1% es la variable de nombre de archivo que se pasa.

¿Esto es posible? ¿Alguien sabe como hacerlo? ¿O todo mi enfoque es incorrecto?

+0

. Los archivos .bat pueden usar variables. Pueden bucle. Pueden iterar sobre cada línea de un archivo de texto. Muchas opciones –

+0

El problema es que ftp.txt no es un archivo por lotes, es una serie de comandos que se canalizarán al cliente ftp. –

+0

@Marc Si tiene un script por lotes, SuperNES puede generar ftp.txt –

Respuesta

15

Puede generar el archivo ftp.txt sobre la marcha con su archivo bat. Basta con hacer algo como:

echo ftp.myserver.com>ftp.txt 
echo username>>ftp.txt 
echo password>>ftp.txt 
echo put filename1.dat>>ftp.txt 
echo put filename2.dat>>ftp.txt 
echo put filename3.dat>>ftp.txt 
echo put filename4.dat>>ftp.txt 
ftp -s:ftp.txt 

Por supuesto, ahora que está en el archivo del palo puede utilizar variables de entorno y otras cosas en lugar de "filenameX.dat"

Por ejemplo:

echo put %file1% >>ftp.txt 
+0

esto funcionó. ¡Gracias! – SuperNES

+0

No coloque un espacio antes de '>>' de lo contrario, habrá un espacio impreso en el archivo de texto, arruinando la contraseña. Tuve que usar 'echo password >> ftp.txt' sin el espacio extra. – degenerate

+1

@degenerate: arreglado, ¡gracias! –

0

No creo que el cliente FTP de línea de comando en Windows sea lo suficientemente inteligente como para hacer interpolación de variables de entorno/shell en los comandos. Pero puede hacer que el archivo .bat que lo controle genere el script ftp dinámicamente, y haga las cosas variables mientras se encuentre todavía en el nivel del shell.

2

Para actualizar la respuesta, aquí hay un archivo por lotes actualizado. Tenga en cuenta la exclusión del espacio después del nombre de usuario y la contraseña (a medida que pasa un espacio al sitio ftp). Esto también utilizará un argumento pasado al archivo por lotes.

echo open ftp.myserver.com>ftp.txt 
echo username>>ftp.txt 
echo password>>ftp.txt 
echo put %1>>ftp.txt 
echo quit>>ftp.txt 
ftp -s:ftp.txt 
Cuestiones relacionadas