batch FTP para subir archivos mas nuevos

Iniciado por sombrass, 7 Marzo 2012, 01:13 AM

0 Miembros y 1 Visitante están viendo este tema.

sombrass

Saludos estimados, a ver si me pueden apoyar el tema es que hice un batch para subir archivos a un servidor remoto y todo trabaja muy bien, sin problemas, mi pregunta es, como le hago para que suba el archivo solo y si solo ha sido modificado.
<<ftp -i -s:ftpstart.txt 10.55.79.132>> archivo ejecutar.bat
<<archivo ftpstart.txt>>
user
pass
binary
put basededatos.dbf
quit

los archivos suben pero siempre sobrescribe, y si pesa 100 megas, pues a enviarlo de nuevo :(, si es un archivo que incremento entonces si lo envío pero si no, como le hago para que solo lo envíe cuando el archivo es mas nuevo.

Saludos espero me puedan ayudar

DA KILLER

Pues creo que si lees el tutorial de sirdarkcat sabrás como hacer eso y mucho más...

http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html

Fíjate sobre todo en los puntos primero, quinto y octavo.

CITO:

Variables y Argumentos:

Citar
Código (dos) [Seleccionar]

       %~f1        - regresa la ruta y el archivo de %1.
       %~d1        - regresa la letra de la unidad de %1.
       %~p1        - regresa solo la ruta del archivo %1.
       %~n1        - regresa solo el nombre de archivo %1.
       %~x1        - regresa solo la extension del archivo %1.
       %~s1        - regresa solo la ruta, con directorios, con nombres cortos del archivo %1.
       %~a1        - regresa los atributos del archivo.
       %~t1        - regresa la hora/fecha del archivo %1
       %~z1        - regresa el tamaño del archivo %1.


FOR:

CitarFOR es una herramienta muy completa, nos permite analizar segmentos de la salida de comandos, funciones y el contenido de archivos.

Tambien permite hacer bucles de la siguiente manera:

Código (dos) [Seleccionar]
FOR /L %%var IN (inicio,incremento,fin) DO (acciones)

inicio, es el valor inicial, incremento es la cantidad a sumar, y fin es la cantidad a detenerse, por ejemplo:

Código (dos) [Seleccionar]
FOR /L %%i IN (0,1,10) DO (echo %%i)
imprimira 0 1 2 3 4 5 6 7 8 9 10

sinembargo, la forma mas sencilla de usar FOR, es para numerar archivos, y hacer algo con ellos.. por ejemplo:

Código (dos) [Seleccionar]
FOR %%x in (x*) DO echo %%x
mostrará todos los archivos que empiezan con x.

para SOLO mostrar directorios:
FOR /D %%x in (m*) DO echo %%x
el modificador "/D", mostrará solo los directorios, que empiesen con m.

El comando se puede hacer "recursivo", es decir, que se ejecute  dentro de cada directorio, con el comando "/R", por ejemplo, en una estructura de directorios como la siguiente:


├───adios
│   └───algo
│       └───xx
└───hola


al ejecutar el comando:
Código (dos) [Seleccionar]
FOR /R /D %%x in (a*) DO echo %%x
C:\adios
C:\adios\algo


sinembargo, al ejecutar el comando..
Código (dos) [Seleccionar]
FOR /R %%x in (*x*) DO echo %%x
C:\ax.txt
C:\adios\sx.txt
C:\adios\wwx.txt
C:\adios\algo\kkx.txt
C:\adios\algo\xx\xx.txt
C:\hola\ax.txt
C:\hola\rx.txt


nos mostrara todos los archivos que coinciden con la sequencia especificada, incluso podriamos hacer un buscador en batch, con el uso de FINDSTR y FOR.

Tenemos otro modificador, /F que nos permite usar ciertas opciones para separar el resulado de las acciones.. comandos, cadenas, o archivos. Su sintaxis es la siguiente:

Código (dos) [Seleccionar]
FOR /F ["opciones"] %var IN (conjunto) DO (acciones)

conjunto puede ser:
conjunto de archivos -> sin comillas
cadena de caracteres -> con comillas dobles (" ")
comando -> con comilla simple (' ')

las opciones son las siguientes:
eol -> todo lo que este despues de este caracter sera ignorado (para cada linea)
skip -> numero de lineas a saltarse al principio del archivo/comando.
delims -> esto sirve para separar las strings.. si no se coloca esta opcion, se usaran como separadores "espacio" y "tab"
tokens -> esto es para especificar cuales segementos, delimitados por "delims", seran pasados a las variables.. por ejemplo:
1,2,3
solo pasara los primeros 3 segmentos.
1,2*
pasara 2 segmentos, el primero y todo lo que este despues (el * regresa todo el resto de la linea)
1,2-6,8,9*
regresara 4 segmentos, el primero, desde el segundo hasta el sexto, el octavo y el resto de la linea, despues del noveno, el signo de menos (-) genera intervalos.

por ultimo, esta la opcion:
usebackq -> que cambia la forma de interpretar si es string o comando, de la siguiente manera:
'cadena'
`comando`

Nota: [`] es diferente al caracter de acento [´]

por ejemplo, el siguiente comando:

Código (dos) [Seleccionar]
FOR /F "tokens=1,3-5,7-9,10* delims= " %%i IN ("George no es malvado, es bondadoso, siempre piensa en los demas.") DO echo %%i %%j %%k %%l tonto, %%m %%n %%o matar a %%p %%q

dara de resultado:
Código (dos) [Seleccionar]
George es malvado, es tonto, siempre piensa en matar a los demas.

FOR es un comando INCREÍBLEMENTE COMPLETO, y FINDSTR es el otro comando que te ayudará mucho, (recuerda que también puedes emplear FIND como filtro ;) ).



Finalmente FINDSTR está en el punto 8:

Citar
  • FINDSTR
extension de FIND, acepta expresiones regulares, y busqueda general (lo mas parecido que DOS tiene a grep), descripción detallada:

Busca cadenas en los archivos.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:archivo]
   [/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color]
   [cadenas] [[unidad:][ruta]nombredearchivo[ ...]]

  /B        Hace coincidir los modelos si están al principio de la línea.
  /E        Hace coincidir los modelos si están al final de la línea.
  /L        Literalmente utiliza cadenas de búsqueda.
  /R        Utiliza cadenas sde búsqueda como expresiones regulares.
  /S        Busca archivos que coinciden en el directorio actual y en todos
            los subdirectorios.
  /I        Especifica que la búsqueda no distingue mayúsculas de minúsculas.
  /X        Imprime líneas que coinciden con exactitud.
  /V        Sólo imprime líneas que no contienen una correspondencia.
  /N        Imprime el número de la línea antes de la línea que coincide.
  /M        Sólo imprime el nombre de archivo si el archivo contiene una
            correspondencia.
  /O        Imprime un carácter de desplazamiento antes de las líneas que
            coinciden.
  /P        Omite archivos con caracteres que no son imprimibles
  /A:attr   Especifica atributos de color con dos dígitos hexadecimales. Ver
            "color /?"
  /F:archivo  Lee la lista de archivos desde el archivo especificado
            (/ significa consola).
  /C:cadena   Utiliza una cadena especificada como una búsqueda de cadena
            literal.
  /G:archivo  Coje la búsqueda de archivos desde el archivo especificado
            (/ significa consola).
  /D:dir    Busca un signo de punto y coma de la lista delimitada de
            directorios
  cadenas   Texto que se debe buscar.
  [unidad:][ruta]nombredearchivo
            Especifica un archivo o  archivos que buscar.

Utiliza espacios para separar múltiples cadenas de búsqueda a no ser que
el argumento lleve un prefijo con /C.  Por ejemplo, 'FINDSTR "qué tal" x.y'
busca "qué" o "tal" en el archivo x.y.  'FINDSTR /C:"qué tal" x.y' busca
"qué tal" en el archivo x.y.

Expresión regular de referencia rápida:
  .        Comodín: cualquier carácter
  *        Repetir: cero o más ocurrencias de un carácter previo o de clase
  ^        Posición de línea: comienzo de la línea
  $        Posición de línea: fin de línea
  [clase]  Clase de carácter: cualquier carácter en la serie
  [^class] Clase inversa: cualquier carácter que no esté en la serie
  [x-y]    Intervalo: cualquier carácter que esté dentro del intervalo
           especificado
  \x       Escape: uso literal de un metacarácter x
  \<xyz    Posición de palabra: principio de palabra
  xyz\>    Posición de palabra: fin de palabra

Para obtener una información más completa sobre expresiones regulares de
FINDSTR referirse al Comando de referencia Command en línea.



Con ello deberías poder crear un script que almacene en un archivo las fechas de modificación de los archivos, así como su tamaño, si varían ambas variables lo reenvía.

Busca información sobre el comando AT para programar cada cuanto re-analiza los archivos, 24 hs, 72 hs., una semana, cada mes, lo que te sea más conveniente. También puedes gracias a %~z hacer una comparación lógica, si es mayor a X tamaño no actualizar, posponer por X tiempo, o bien dejar un aviso en otro archivo, el cual revises periódicamente.

En fin espero te sirva, saludos y suerte ;)
.: DA KILLER :.