使用 BAT 根据文本中的文件名列表查找指定目录下所有文件夹和子文件夹中的匹配项并使用新文件替换

前提:
1. 一个装有新文件的 A 文件夹,没有层级结构
2. 目标目录 B 下包含大量文件夹和子文件夹

需求:
1. 根据 A 文件夹中的文件生成一个文本文件 i,包含文件名和扩展名
2. 根据生成的这个文本文件对 B 目录搜索匹配项
3. 如果查到匹配项,就把 A 文件夹中的对应文件复制过去并覆盖目标目录中的原文件
4. 如果没有查到匹配项则不作提示
5. 遍历完成后输出一个文本文件 j,包含所有未复制过去的文件的名称

@echo off
rem 将一个目录里的文件替换掉另一个目录下的同名文件
set #=Any question&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$% %z%
cd /d "%~dp0"
set "folder1=D:\test\A"
set "folder2=D:\test\B"
set "txtfile=lost.txt"
type nul>"%txtfile%"
for /f "delims=" %%a in ('dir /a-d/b "%folder1%"') do (
    set "n="
    for /f "delims=" %%b in ('dir /a-d/b/s "%folder2%"') do (
        if /i "%%~nxa" equ "%%~nxb" (
            set /a n+=1
            echo;"%folder1%\%%~nxa" --^> "%%b"
            copy /y "%folder1%\%%~nxa" "%%b"
        )
    )
    if not defined n (>>"%txtfile%" echo;%%a)
)
echo;%#% +%$%%$% %z%
pause

追问

可以运行,但总提示“拒绝访问”……我已经用管理员身份运行了,还是不行……也没有其他程序占用文件,何解?
【编辑】
不知为何原文件和新文件都变成只读属性了,改了就好了。谢谢了!

追答

按运行后窗口中的提示联系我

温馨提示:答案为网友推荐,仅供参考