Board logo

标题: [文件操作] 批处理如何实现两个文件夹下的文件差异拷贝? [打印本页]

作者: bolebole    时间: 2009-4-15 09:54     标题: 批处理如何实现两个文件夹下的文件差异拷贝?

新手请教~~
现在需要实现一个功能,比较两个文件夹下如Dir1和Dir2的所有文件(包括子目录里的文件),实现从Dir2到Dir1的差异拷贝,该如何实现?
我现在是一个目录一个目录的比较(因为Dir1和Dir2的目录结构可能不同),但是Dir1和Dir2根目录下的文件该怎么办呢?
请各位多多帮助,谢谢。
作者: Batcher    时间: 2009-4-15 13:12

先把你尝试过的代码贴出来看看
作者: bolebole    时间: 2009-4-17 10:38

比如:
Dir1文件夹的目录结构为:
E:\DIR1
    ¦  test.mp3
    ¦  test.txt
    ¦  
    -aa
        8800G_Tree090407.txt

Dir2文件夹目录结构为:
E:\DIR2
     ¦  8800G_Tree090407.txt
     ¦  test.mp3
     ¦  test.txt
     ¦  worklog_v0.7.7.1_TD.xls
     ¦  
     -aa
        8800G_Tree090407.txt
        result.txt

希望实现从Dir2向Dir1的差异拷贝。
我现在是:一个一个比较子目录,实现了子目录下的差异拷贝,代码如下:

@echo off&setlocal enabledelayedexpansion
for /r "E:\dir2\aa" %%f in (*.*) do (
set file=%%~nxf
if not exist "E:\dir1\aa\!file!" copy /y "E:\dir2\aa\!file!" "E:\dir1\aa"
)

可是如何实现根目录下的文件差异拷贝呢?
作者: bolebole    时间: 2009-4-21 10:18     标题: 回复 3楼 的帖子

我已经自己解决了,和大家共享一下解决思路。
1、先获取E:\Dir2的所有文件,用for /r 的方式,将结果存在一个临时文件tmp.txt中;注意要获取全路径。就是要用%%~f扩展;
     代码如:
     for /r "e:\dir2" %%f in (*.*) do (
     set file =%%~ff
     echo !file!>>tmp.txt
     )
2、读取临时文件的每一行,将字符串"E:“\Dir2"替换成"E:\Dir1";再判断该文件是否在Dir1中存在;
3、如果存在就继续;不存在就拷贝过去。
     代码如:(根据实际情况选择截取哪一节)
      for /f "tokens=2*,delims=\"  %%i in (tmp.txt) do (
      if not exist "e:\dir1\%%i\%%j" copy "e:\dir2\%%i\%%j" "e:\dir1\%%i\%%j"
      )

谢谢。

[ 本帖最后由 bolebole 于 2009-4-21 10:29 编辑 ]
作者: Batcher    时间: 2009-4-21 10:51     标题: 回复 4楼 的帖子

你把完整代码贴出来,别人才能给你支持代码中的不足之处,才能给出改进建议,甚至告诉你更好的解决方法。
作者: bolebole    时间: 2009-4-21 16:27     标题: 回复 5楼 的帖子

因为代码写在公司内网,转不出来,所以只写了个思路,把关键的几句代码贴上来了。

[ 本帖最后由 bolebole 于 2009-4-21 16:39 编辑 ]
作者: Batcher    时间: 2009-4-21 19:13     标题: 回复 6楼 的帖子

关键代码存在bug,望谨慎使用。




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