使用 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 中,但 FOR 循环中的条件仍未验证为 True,因此直接转到下一个 UNC。以下是代码 -

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

答案1

您可以循环遍历“关键字”列表一次,并使用迭代的关键字值以及一些括起来的通配符作为搜索字符串IE *<Keyword>*。您可以从其文件列表遍历每个 UNC 路径值的目录树,并仅对与搜索字符串“关键字”匹配的目录树执行复制操作。

但本质上……

  • 首先对于/f循环将逐行读取字符串文件列表的每一行,每行的值将是一个迭代值,作为第一个参数传递给 称呼命令。
  • 第二对于/f循环将逐行读取 UNC 路径文件列表的每一行,并将其和第一个传递的第一个参数值一起传递对于/f循环作为两个参数 称呼命令。
  • 最后对于/r循环将以迭代字符串值作为传递的单独参数递归搜索迭代 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

更多资源

  • 对于/F

  • 称呼

    CALL 命令会将控制权连同任何指定的参数一起传递给指定标签后的语句。要退出子程序,请指定GOTO:eof此项,将控制权转移到当前子程序的末尾。

  • 对于/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.
    

相关内容