[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

评分人数

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

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

回复 1# 大地

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

评分人数

TOP

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

TOP

返回列表