Board logo

标题: [文件操作] 批处理如何比较两个文件夹,有差异的文件复制到另一个文件夹? [打印本页]

作者: viian    时间: 2023-12-28 17:57     标题: 批处理如何比较两个文件夹,有差异的文件复制到另一个文件夹?

批处理比较SYS和SYS2两个文件夹的内容,包括两个文件夹内的子文件夹,将SYS文件夹中有差异的文件或子文件夹复制到另一个新的文件夹SYS3里。
请问下具体要如何实现呢?谢谢!
目前的代码如下:
  1. @echo off
  2. set f1=C:\Users\Administrator\Desktop\SYS
  3. set f2=C:\Users\Administrator\Desktop\SYS2
  4. set f3=C:\Users\Administrator\Desktop\SYS3
  5. for /f "delims=" %%i in ('dir /b "%f1%"') do (
  6. dir /b "%f2%" >nul |find /I "%%i" >nul || copy "%f1%\%%i" "%f3%\%%i" >nul
  7. )
  8. :exit
复制代码

作者: wanghan519    时间: 2023-12-29 05:18

要不试试diff,有三种情况,只存在于aaa里,只存在于bbb里,以及aaa里与bbb里不同,需要复制的是指1和3两种情况吗

作者: viian    时间: 2023-12-29 08:42

回复 2# wanghan519


    是的。aaa文件夹会不定期增加新数据,bbb文件夹是aaa文件夹的子集。
作者: wanghan519    时间: 2023-12-29 09:29

本帖最后由 wanghan519 于 2023-12-29 09:32 编辑

试了一下,发现rsync是最方便的工具
  1. rsync -av --compare-dest=../bbb/ aaa/ ccc/
复制代码
把aaa里存在,bbb里不存在或不同的文件,复制到ccc
还可以解决硬链接提高速度,等很多问题
或者说rsync就是用来做这件事的,我一直用它做磁盘的增量备份

作者: 77七    时间: 2023-12-29 12:14

本帖最后由 77七 于 2024-4-28 12:01 编辑
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. set f1=C:\Users\Administrator\Desktop\SYS
  4. set f2=C:\Users\Administrator\Desktop\SYS2
  5. set f3=C:\Users\Administrator\Desktop\SYS3
  6. for /f "tokens=1-2* delims=         " %%a in ('robocopy "%f1%" "%f2%" /e /xc /xn /xo /l /x /fp ^|findstr /rb /c:"         *新文件" /c:"         *新目录"') do (
  7.         echo 新文件\目录 [%%c]
  8.         set file=%%c
  9.         setlocal enabledelayedexpansion
  10.         for /f "delims=" %%x in ("!file:%f1%=%f3%!") do (
  11.                 endlocal
  12.                 if exist "%%c\" (
  13.                         md "%%x" 2>nul
  14.                 ) else (
  15.                         md "%%~dpx" 2>nul
  16.                         copy "%%c" "%%x"
  17.                 )
  18.         )
  19. )
  20. pause
复制代码

代码存在问题,更正




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2