Archivo por lotes si comando

Archivo por lotes si comando

Estoy intentando crear un archivo por lotes por primera vez. Esto será para descargar un archivo que se actualiza una vez por semana con una nueva ID. Este es el archivo por lotes que he creado hasta ahora:

@echo off
echo open SERVER> temp.txt
echo USERNAME>> temp.txt
echo PWD>> temp.txt
echo cd />> temp.txt
echo cd Events/_PPV_Barker>> temp.txt
echo binary>> temp.txt
echo get Barker*_480i.ts>> temp.txt 
ftp -s:temp.txt
del temp.txt

Sé que cada vez que se carga un nuevo archivo en el servidor, el inicio del nombre del archivo será Barkery el nombre del archivo terminará con 480i.ts. Intenté * como se muestra arriba, pero no funciona. ¿Cómo puedo usar el comando if para obtener el archivo con una identificación única cada vez? ¿O hay alguna otra forma además del comando if?

Cualquier ayuda será apreciada.

Gracias

Keshav

Respuesta1

Si te entiendo bien, hay un archivo nuevo cada vez que accedes al servidor, pero no conoces los detalles de su nombre. Lo que no sé es si el archivo se elimina después de descargarlo o si tienes un número cada vez mayor de archivos y tienes que elegir el último.

En el caso más simple, solo hay un archivo, y aquí su solución es casi correcta: se necesita un cambio simple, reemplazarlo getpor mget, cuando el comodín *funcione:-

echo mget Barker*_480i.ts>> temp.txt

Si hay muchos archivos que coinciden con esta máscara de archivo, descargará una cantidad cada vez mayor de archivos en cada acceso. Una solución rápida y sucia es mantener los archivos en su directorio actual y hacerlos de solo lectura: obtendrá muchos errores, pero el nuevo archivo se descargará y no tendrá la sobrecarga de transferir los archivos que desea. he obtenido anteriormente.

Si tiene acceso completo al directorio remoto, puede eliminar, mover o cambiar el nombre del archivo descargado en el control remoto, de modo que cada vez tenga solo un archivo que coincida con la máscara del archivo.

Si no puede hacer ninguna de estas cosas, necesitará dos ftpllamadas: la primera obtendrá una lista de directorios del control remoto, que luego comparará con su lista remota anterior, para que luego pueda identificar el nuevo archivo y cree una segunda ftpllamada para recuperarlo. No será fácil escribir un archivo por lotes para hacer esto, pero es posible: hago cosas como esta cuando proceso archivos WebCam.

Respuesta2

Si está dispuesto a colocar su contraseña y nombre de usuario en el script (¡en texto sin formato!), entonces no debería importarle usarlos en la línea de comando.

Si conserva copias locales de los archivos antiguos después de descargarlos y no los cambia ni sus marcas de tiempo, puede eliminar toda la idea del archivo por lotes usandowget para Windowse incluya la --timestampingopción. Eso comparará el tamaño y la marca de tiempo de los archivos locales con los archivos remotos, y solo descargará archivos remotos cuando alguno de ellos sea diferente o el archivo local no exista. Como beneficio adicional, si se perdió actualizaciones anteriores, descargará todos los archivos nuevos, no solo el más nuevo.

Su línea de comando se vería así:

`wget --ftp-user=<user> --ftp-password=<password> --timestamping ftp://example.com/Events/_PPV_Barker/Barker*_480i.ts`

Por supuesto, esto supone que tiene los privilegios adecuados para instalar wget y que conserva las copias anteriores localmente.

Respuesta3

intenta usar el:

mget

dominio. Lo busqué y dice obtener varios archivos.

Respuesta4

Otros programas/formas

El uso ftpno es seguro.
La versión segura de ftp se llama ftps,ftp seguro. Intenta usarlo en lugar de ftp, si puedes.

Siempre es un buen ejercicio hacer tus propios scripts, pero es mejor utilizar las herramientas creadas para tal fin cuando existan. Como alternativas más acogedoras puedes utilizar.wget(ver más abajo) que no requerirá la instalación remota de ningún otro servidor.

Como tiene acceso a la computadora remota si está instalada, puede usarrsynctambién.
Si falla, intente usarlo scp -po sftpaproveche la clave ssh [4] .

Si desea seguir con ftp, use la mgetopción que copiará ciegamente todos los archivos del directorio, pero configure de antemano el modo de transferencia de archivos a binario con el binarycomando.


Wget

wget - El descargador de red no interactivo [1,2] . Puedes usar:

wget -S -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

La opción -Nes mantener marcas de tiempo y descargar sólo archivos más recientes que los locales. Es posible que
la cita "sea necesaria para evitar la expansión del shell en Linux.
También funciona en Windows (por supuesto, con la versión de Windows del programa).


un mas completolínea de comandoen tu caso (y en una sola línea) debería ser:

wget -user=USERNAME -password=PASSWORD 
     -N "ftp://YourSite/Events/_PPV_Barker/Barker*_480i.ts" 

Por supuesto, es más prudente evitar escribir la contraseña en sulínea de comandoo en scripts... simplemente puedes usar la opción autoexplicativa --ask-password.

Una solución mejor en Linux es colocar la información necesaria en un archivo llamado .wgetrc. Debería ser fácil encontrar el nombre equivalente en la documentación de Windows.

$ cat ~/.wgetrc
ftp_user=UsernameOnTheRemoteFTP
ftp_password=PasswordOnTheRemoteFTP
http_user=UsernameOnTheRemoteHTTP
http_password=PasswordOnTheRemoteHTTP

Puedes leer desde wget --helpo desde man wget:

-N, --marca de tiempo No vuelva a recuperar archivos a menos que sean más nuevos que los locales.
-S, --respuesta-servidor respuesta del servidor de impresión.

--usuario=usuario
--contraseña=contraseña
Especifique el nombre de usuario y la contraseña para la recuperación de archivos FTP y HTTP. Estos parámetros se pueden anular utilizando las opciones --ftp-user y --ftp-password para conexiones FTP y las opciones --http-user y --http-password para conexiones HTTP.


información relacionada