Copie archivos de red con nombres de archivos coincidentes de una lista de archivos usando Windows Batch Script

Copie archivos de red con nombres de archivos coincidentes de una lista de archivos usando Windows Batch Script

Tengo 2 archivos, 1 que contiene ciertas palabras clave y el otro que contiene una lista de rutas. Quiero buscar las palabras clave de la primera lista de archivos en la lista de rutas de archivos y, si las encuentro, copiar los archivos de la ruta de archivo especificada a una carpeta de destino específica.

Contenido del primer archivo

Keyword1
Keyword2
Keyword3
Keyword4

Contenido del segundo archivo

\\server\path...\Keyword1.txt
\\server\path...\Keyword1_0_1.txt
\\server\path...\Keyword2_0_1.txt
\\server\path...\Keyword2_1_9.txt
\\server\path...\Keyword3_1_0_1.txt

Tengo que escribir el script por lotes de Windows para este propósito.

==================================================== ==========

Lo siento @pimp-juice-it. No estoy seguro de cómo pegar la captura de pantalla. Por lo tanto, copie y pegue el resultado a continuación:

d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\33.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D: \Temp_Script\Source\44.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\44.txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script> LLAMADA :FileExist "55" "D:\Temp_Script\Source\55.txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55.txt" %G IN (55*) DO ECHO " 55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - Copiar (2).txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\ 55 - Copiar (2).txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - Copiar.txt"

Como puede ver, la palabra clave "55" existe en la UNC, pero aún así la condición no se valida como Verdadera en el bucle FOR y pasa directamente a la siguiente UNC. A continuación se muestra el código:

:FileExist FOR /R "%~2" %%G IN (%~1*) DO ECHO "%~1"

Respuesta1

Puede recorrer la lista de "palabras clave" una vez y utilizar los valores de palabras clave iterados junto con algunos caracteres comodín adjuntos como cadenas de búsqueda.es decir *<Keyword>*. Puede recorrer el árbol de directorios de cada valor de ruta UNC desde su lista de archivos y realizar la operación de copia solo en aquellos que existan y coincidan con la cadena de búsqueda "palabras clave".

Aunque esencialmente...

  • La primerapara /fEl bucle leerá cada línea de la lista de archivos de cadena una por una y el valor de cada línea será un valor iterado que se pasa en el primer argumento al llamardominio.
  • El segundopara /fEl bucle leerá cada línea de la lista de archivos de ruta UNC una por una y la pasará junto con el valor del primer argumento pasado por el primero.para /fbucle como dos argumentos con su llamardominio.
  • El últimopara /rloop buscará recursivamente la ruta UNC iterada con el valor de cadena iterado como argumentos separados que se pasó y luego copiará todos los archivos coincidentes.

Guión por lotes

@ECHO ON

SET "strList=\\server\Folder\Path\SearchStrings.txt"
SET "pathList=\\server\Folder\Path\UNCPaths.txt"
SET "targetPath=\\server\target\folder\path"

FOR /F "USEBACKQ TOKENS=*" %%S IN ("%strList%") DO CALL :Paths "%%~S"
PAUSE
EXIT

:Paths
FOR /F "USEBACKQ TOKENS=*" %%P IN ("%pathList%") DO CALL :FileExist "%~1" "%%~P"
GOTO :EOF

:FileExist
FOR /R "%~2" %%C IN (*%~1*) DO XCOPY /F /Y "%%~C" "%targetPath%\"
GOTO :EOF

Recursos adicionales

  • Para /F

  • Llamar

    El comando CALL pasará el control a la declaración después de la etiqueta especificada junto con los parámetros especificados. Para salir de la subrutina, especifique GOTO:eofque esto transferirá el control al final de la subrutina actual.

  • Para /R

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    
        Walks the directory tree rooted at [drive:]path, executing the FOR
        statement in each directory of the tree.  If no directory
        specification is specified after /R then the current directory is
        assumed.  If set is just a single period (.) character then it
        will just enumerate the directory tree.
    

información relacionada