Copie arquivos de rede com nomes de arquivo correspondentes de uma lista de arquivos usando o Windows Batch Script

Copie arquivos de rede com nomes de arquivo correspondentes de uma lista de arquivos usando o Windows Batch Script

Eu tenho 2 arquivos, 1 contendo determinadas palavras-chave e outro contendo uma lista de caminhos. Quero pesquisar as palavras-chave da primeira lista de arquivos na lista de caminhos de arquivos e, se encontradas, copiar os arquivos do caminho de arquivo especificado para uma pasta de destino específica.

Conteúdo do primeiro arquivo

Keyword1
Keyword2
Keyword3
Keyword4

Conteúdo do segundo arquivo

\\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

Eu tenho que escrever o script em lote do Windows para essa finalidade.

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

Desculpe @pimp-juice-it, não sei como colar a captura de tela. Portanto, copie e cole a saída abaixo -

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> CALL :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 - Copy.txt"

como você pode ver, a palavra-chave "55" existe no UNC, mas ainda assim a condição não está sendo validada como True no loop FOR e vai para o próximo UNC diretamente. Abaixo está o código -

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

Responder1

Você pode percorrer a lista de "palavras-chave" uma vez e usar os valores de palavras-chave iterados junto com alguns caracteres curinga incluídos como strings de pesquisaou seja *<Keyword>*. Você pode percorrer a árvore de diretórios de cada valor de caminho UNC de sua lista de arquivos e executar a operação de cópia apenas para aqueles que correspondem à string de pesquisa "palavras-chave".

Essencialmente, porém...

  • O primeiropara /floop lerá cada linha da lista de arquivos de string, uma por uma, e o valor de cada linha será um valor iterado que é passado no primeiro argumento para o chamarcomando.
  • O segundopara /floop irá ler cada linha da lista de arquivos do caminho UNC, uma por uma, e passá-la junto com o valor do primeiro argumento passado pelo primeiropara /floop como dois argumentos com seu chamarcomando.
  • O últimopara /rloop pesquisará recursivamente o caminho UNC iterado com o valor da string iterada como argumentos separados que foi passado e, em seguida, copiará todos os arquivos correspondentes.

Script em lote

@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 adicionais

  • Para /F

  • Chamar

    O comando CALL passará o controle para a instrução após o rótulo especificado junto com quaisquer parâmetros especificados. Para sair da sub-rotina, especifique GOTO:eofque isso transferirá o controle para o final da sub-rotina atual.

  • 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.
    

informação relacionada