返回列表 发帖

[文件操作] 【已解决】批处理根据A的结构和名称,从B中提取并复制到C

F盘下有A、B、C三个文件夹,A文件夹下有深层子目录,各级子目录均有文件,B文件夹下有完整的windows系统文件,现在需要写一串批处理代码,要求根据A文件夹的结构架构和文件名,从B文件夹中提取文件夹和文件名,然后复制到C文件夹,如何写?
我试了从AI中复制出来的代码无法运行(不正确)
哪位大神帮我修改一下,或者重谢新写一个,谢谢
(不存在新与旧)
@echo off
setlocal enabledelayedexpansion
set "A=F:\A"
set "B=F:\B"
set "C=F:\C"
:: 调试开关:1=开启详细日志,0=关闭日志
set "DEBUG=1"
:: 1. 创建C目录结构并输出调试信息
for /r "%A%" %%d in (*) do (
    set "relativePath=%%~pd"
    if not exist "%C%!relativePath!" (
        md "%C%!relativePath%"
        if %DEBUG%==1 echo 创建目录:%C%!relativePath!
    )
)
:: 2. 处理每个文件并输出调试信息
for /r "%A%" %%f in (*) do (
    set "fileName=%%~nxf"
    set "targetDir=%C%%%~pf%"
   
    :: 在B中查找第一个匹配的文件
    set "found=false"
    for /r "%B%" %%b in (*%fileName%) do (
        copy /y "%%b" "%targetDir%"
        if %DEBUG%==1 echo 复制文件:%%b -> %targetDir%
        set "found=true"
        break
    )
    if not found (
        if %DEBUG%==1 echo 未找到文件:%fileName% 在B中...
    )
)
echo **************************************
echo 复制完成!
echo **************************************COPY
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2025-3-1 08:13 编辑

回复 1# 大地

以下批处代码先遍历 F:\A 各级目录中的每个文件,并逐一在 F:\A 中搜索定位,定位成功后连其目录带文件复制到 F:\C 目录下...
@echo off &set "da=F:\A" &set "db=F:\B" &set "dc=F:\C"
for /f "delims=" %%F in ('dir /b/s/a-d "%da%\*" ') do for /f "delims=" %%i in ('dir /b/s/a-d "%db%\%%~nxF" ') do (
   set "p=%%~dpi" &set "i=%%i" &setlocal enabledelayedexpansion
   xcopy /iyq "!i!" "!p:%db%=%dc%!" &endlocal)
pause&exit/bCOPY
如果要从 F:\A 完整复制子目录及其文件直接到 F:\C 用以下一行流代码即可(不必再绕经 F:\B 作同名提取)...
@xcopy /siyq "F:\A" "F:\C"COPY
如果楼主确认就是要从 F:\B 中提取与 F:\A 下对应的同名文件并采用 F:\A 中的对应目录复制到 F:\C,可用以下代码...
@echo off &set "da=F:\A" &set "db=F:\B" &set "dc=F:\C"
for /f "delims=" %%F in ('dir /b/s/a-d "%da%\*" ') do for /f "delims=" %%i in ('dir /b/s/a-d "%db%\%%~nxF" ') do (
   set "p=%%~dpF" &set "i=%%i" &setlocal enabledelayedexpansion
   xcopy /iyq "!i!" "!p:%da%=%dc%!" &endlocal)
pause&exit/bCOPY
1

评分人数

TOP

回复 2# aloha20200628
测式成功,大神厉害,谢谢!

TOP

返回列表