标题: [文件操作] 批处理如何比较两个文件夹,有差异的文件复制到另一个文件夹? [打印本页]
作者: viian 时间: 2023-12-28 17:57 标题: 批处理如何比较两个文件夹,有差异的文件复制到另一个文件夹?
批处理比较SYS和SYS2两个文件夹的内容,包括两个文件夹内的子文件夹,将SYS文件夹中有差异的文件或子文件夹复制到另一个新的文件夹SYS3里。
请问下具体要如何实现呢?谢谢!
目前的代码如下:- @echo off
-
- set f1=C:\Users\Administrator\Desktop\SYS
- set f2=C:\Users\Administrator\Desktop\SYS2
- set f3=C:\Users\Administrator\Desktop\SYS3
-
- for /f "delims=" %%i in ('dir /b "%f1%"') do (
- dir /b "%f2%" >nul |find /I "%%i" >nul || copy "%f1%\%%i" "%f3%\%%i" >nul
- )
-
- :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是最方便的工具- rsync -av --compare-dest=../bbb/ aaa/ ccc/
复制代码
把aaa里存在,bbb里不存在或不同的文件,复制到ccc
还可以解决硬链接提高速度,等很多问题
或者说rsync就是用来做这件事的,我一直用它做磁盘的增量备份
作者: 77七 时间: 2023-12-29 12:14
本帖最后由 77七 于 2024-4-28 12:01 编辑
- @echo off
- rem 批处理保存为ansi编码格式
- set f1=C:\Users\Administrator\Desktop\SYS
- set f2=C:\Users\Administrator\Desktop\SYS2
- set f3=C:\Users\Administrator\Desktop\SYS3
-
- for /f "tokens=1-2* delims= " %%a in ('robocopy "%f1%" "%f2%" /e /xc /xn /xo /l /x /fp ^|findstr /rb /c:" *新文件" /c:" *新目录"') do (
- echo 新文件\目录 [%%c]
- set file=%%c
- setlocal enabledelayedexpansion
- for /f "delims=" %%x in ("!file:%f1%=%f3%!") do (
- endlocal
- if exist "%%c\" (
- md "%%x" 2>nul
- ) else (
- md "%%~dpx" 2>nul
- copy "%%c" "%%x"
- )
- )
- )
- pause
复制代码
代码存在问题,更正
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |