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

[文件操作] 批处理如何实现两个文件夹下的文件差异拷贝?

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

先把你尝试过的代码贴出来看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

比如:
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"
)

可是如何实现根目录下的文件差异拷贝呢?

TOP

回复 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 编辑 ]

TOP

回复 4楼 的帖子

你把完整代码贴出来,别人才能给你支持代码中的不足之处,才能给出改进建议,甚至告诉你更好的解决方法。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

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

[ 本帖最后由 bolebole 于 2009-4-21 16:39 编辑 ]

TOP

回复 6楼 的帖子

关键代码存在bug,望谨慎使用。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表