Копирование сетевых файлов с совпадающими именами из списка файлов с помощью пакетного скрипта Windows

Копирование сетевых файлов с совпадающими именами из списка файлов с помощью пакетного скрипта Windows

У меня есть 2 файла, один из которых содержит определенные ключевые слова, а другой — список путей. Я хочу выполнить поиск ключевых слов из первого списка файлов в списке путей файлов, и если они будут найдены, то скопировать файлы из указанного пути в определенную целевую папку.

Содержимое первого файла

Keyword1
Keyword2
Keyword3
Keyword4

Содержимое второго файла

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

Для этой цели мне придется написать пакетный скрипт Windows.

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

Извините @pimp-juice-it, я не уверен, как вставить скриншот. Поэтому копирую-вставляю вывод ниже -

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 - Копировать (2).txt" d:\Temp_Script\Script>FOR /R "D:\Temp_Script\Source\55 - Копировать (2).txt" %G IN (55*) DO ECHO "55" d:\Temp_Script\Script>CALL :FileExist "55" "D:\Temp_Script\Source\55 - Копировать.txt"

как вы можете видеть, ключевое слово "55" существует в UNC, но условие все еще не проверяется на True в цикле FOR и оно переходит к следующему UNC напрямую. Ниже приведен код -

:ФайлСуществует FOR /R "%~2" %%G IN (%~1*) DO ECHO "%~1"

решение1

Вы можете выполнить цикл по списку «ключевых слов» один раз и использовать итерированные значения ключевых слов вместе с некоторыми заключенными в них подстановочными знаками в качестве строк поиска.то есть *<Keyword>*. Вы можете пройти по дереву каталогов каждого значения пути UNC из его списка файлов и выполнить операцию копирования только тех, которые существуют и соответствуют строке поиска «ключевые слова».

Но по сути...

  • Первыйдля /фЦикл будет читать каждую строку списка строкового файла одну за другой, и значение каждой строки будет итерированным значением, которое передается в первом аргументе функции вызовкоманда.
  • Второйдля /фцикл будет читать каждую строку списка файлов UNC-путей одну за другой и передавать ее вместе со значением первого аргумента, переданным первымдля /фцикл как два аргумента с его вызовкоманда.
  • Последнийдля /рЦикл будет рекурсивно искать итерированный UNC-путь с итерированным строковым значением в качестве отдельных переданных аргументов, а затем копировать все соответствующие файлы.

Пакетный скрипт

@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

Дополнительные ресурсы

  • Для /Ф

  • Вызов

    Команда CALL передаст управление оператору после указанной метки вместе с любыми указанными параметрами. Для выхода из подпрограммы укажите, GOTO:eofчто это передаст управление в конец текущей подпрограммы.

  • Для /Р

    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.
    

Связанный контент