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

0

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

Primeiro conteúdo do arquivo

Keyword1
Keyword2
Keyword3
Keyword4

Segundo conteúdo do 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 lotes do Windows para essa finalidade.

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

Desculpe @ pimp-juice-it Não sei como colar a imagem. Daí copiar e colar 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 > CHAMADA: 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 > CHAMADA: 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 está indo para o próximo UNC diretamente. Abaixo está o código -

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

    
por Sujitkar 07.08.2018 / 16:30

1 resposta

0

Você pode percorrer uma vez a lista de "palavras-chave" e usar os valores de palavra-chave iterados junto com alguns caracteres curinga incluídos como sequências de pesquisa , por exemplo, *<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 somente para aqueles que existirem correspondentes à string de pesquisa "keywords".

Essentially though...

  • The first for /f loop will read each line of the string file list one by one and each line's value will be an iterated value that is passed at the first argument to the call command.
  • The second for /f loop will read each line of the UNC path file list one by one and pass it and the first argument value passed by the first for /f loop as two arguments with its call command.
  • The last for /r loop will recursively search the iterated UNC path with the iterated string value as separate arguments it was passed, and then copy over all matching files.

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

Mais recursos

  • Para / F

  • Ligue

    The CALL command will pass control to the statement after the label specified along with any specified parameters. To exit the subroutine specify GOTO:eof this will transfer control to the end of the current subroutine.

  • 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.
    
por 07.08.2018 / 19:50