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
-
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:eof
que esto transferirá el control al final de la subrutina actual. -
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.