Archivo por lotes para copiar archivos basados ​​en parte del nombre de archivo de un servidor a otro

Estoy tratando de crear un archivo por lotes (a través de Windows XP Pro) que copie 2 archivos (.zpl) cuyos nombres de archivo varían en longitud. Los archivos ZPL se relacionan con el código de la impresora de etiquetas. Los nombres de los archivos son los siguientes:

FillXferDataPBHAMFill###########.zpl
RellenarFormatosPBHAMRellenar############.zpl

Los signos de libra representan un número asociado con una etiqueta/trabajo en particular que se va a imprimir. Estos números son idénticos por trabajo. De un trabajo a otro, los números varían en longitud y siempre cambian. El directorio del que estoy tratando de extraerlos contiene archivos ZPL de varias ubicaciones, sin embargo, solo quiero los BHAM.

El lote se copiará desde: \Servidor\C:\Directorio1\Directorio2\Directorio3
Para ser copiado a: \Servidor\Directorio1\Directorio2

No estoy seguro de si esto complicará aún más las cosas, pero el archivo por lotes se ejecutará desde una tercera máquina. Además, no necesito copiar todos los archivos cada vez. Siempre que se envíen nuevos trabajos de impresión, los supervisores ejecutarán el lote para copiar los nuevos trabajos de impresión dentro de la última X cantidad de tiempo. X siendo minutos. Esto es lo que tengo hasta ahora...

@echo off
SETLOCAL enableExtensions enableDelayedExpansion

SET sourceDir=Server\C:\Directory1\Directory2\Directory3
SET targetDir=Server\Directory1\Directory2

FOR %%a (FillFormatsPBHAM*.bat) DO (
SET "filename=%%a"
SET "folder=%targetDir%"
XCOPY "%%a" !folder!
)

FOR %%b (FillXferDataPBHAM*.bat) DO (
SET "filename=%%b"
SET "folder=%targetDir%"
XCOPY "%%b" !folder!
)

:END

Pido disculpas por una publicación larga; solo queriendo ser lo más completo posible. Estoy aprendiendo esto sobre la marcha tan desnudo con cualquier ignorancia de mi parte. ¡¡Gracias de antemano por cualquier ayuda!!

Material de StackOverFlow revisado: Referencia1, Referencia2 -- Estuve buscando por todas partes durante la semana pasada y estos fueron los 2 más útiles hasta ahora.

preguntado el 27 de julio de 12 a las 19:07

Esa \Server\C:\Directory1\Directory2\Directory3 la ruta definitivamente causará un error. El especificador de la letra de la unidad debe estar siempre al principio del nombre de la ruta. p.ej: C:\Server\Directory1\Directory2\Directory3. Y si la ruta se encuentra en un servidor remoto, generalmente es así: \\Server\ShareName\Directory1\Directory2\Directory3. -

1 Respuestas

Veo algunas formas de corregir o mejorar su secuencia de comandos BAT.

  1. La opción FOR la sintaxis del comando es FOR %%a IN (*.bat) DO (

  2. La variable sourcedir está configurada Server\C:\Directory1\Directory2\Directory3, que no es una ruta correcta en Windows.

  3. inicializa pero no usa la variable %sourcedir% ni en su bucle FOR ni en su comando de copia

    debe cambiar la unidad y el directorio actuales con un pushd %sourcedir% comando, o especificándolo en el FOR mando.

  4. su ciclo FOR asigna una variable %filename% que nunca se usa, puede omitir esta asignación.

  5. su bucle FOR asigna una variable %folder% que solo se usa en el comando de copia, puede omitir esta asignación y simplemente usar %targetdir%

  6. pero, para simplemente copiar todos los archivos de una carpeta a otra, no necesita FOR iterar sobre todos ellos, puede copiarlos correctamente.

Entonces, eche un vistazo a este sencillo script para comenzar.

SET sourceDir=\\servername\sharename\Directory1\Directory2\Directory3
SET targetDir=\\anotherserver\sharename\Directory1\Directory2
xcopy %sourceDir%\FillFormatsPBHAM*.bat %targetDir%
xcopy %sourceDir%\FillXferDataPBHAM*.bat  %targetDir%

Respondido 29 Jul 12, 15:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.