Board logo

标题: [问题求助] VBS批处理怎样复制文件夹(含子目录)并跳过已存在的重复文件? [打印本页]

作者: zwbposer    时间: 2011-2-13 17:56     标题: VBS批处理怎样复制文件夹(含子目录)并跳过已存在的重复文件?

我现在在D盘有个文件夹A,里面有文件,并且还有多级子目录,整个文件夹(含多层)经常更新,会有新文件,我就需要经常将更新的文件复制到E盘的B文件夹,而不复制已有的文件,并且文件目录结构跟A一样,比如说D:\A\word\xuexi\readme.txt,复制过去就是E:\B\word\xuexi\readme.txt,当复制新文件时跳过已有文件,只复制新文件,我在论坛搜索中找到下面这个VBS的命令代码,但不能复制子目录下的新文件,请大家帮帮我修改一下

On Error Resume Next
sFolder = "D:\A"
tFolder = "E:\B"

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set colSFile = objFSO.GetFolder(sFolder).Files
Set colSSubFolder = objFSO.GetFolder(sFolder).SubFolders

For Each File in colSFile
    File.Copy tFolder, False
Next

For Each Folder in colSSubFolder
    Folder.Copy tFolder, False
Ne

[ 本帖最后由 zwbposer 于 2011-2-14 11:48 编辑 ]
作者: CrLf    时间: 2011-2-13 18:01

替换目标目录的与其子目录下所有1.txt文件:
replace /s /r 1.txt 目标目录
作者: zwbposer    时间: 2011-2-13 18:21

额,我完全新手,听不懂,可以提供完全代码嘛,我好对比
作者: zwbposer    时间: 2011-2-13 19:16     标题: 回复 2楼 的帖子

额,我完全新手,听不懂,可以提供完全代码嘛,我好对比
作者: broly    时间: 2011-2-14 00:45

  1. On Error Resume Next
  2. Dim strFolder1,strFolder2
  3. strFolder1="D:\A"  '//要查找的目录
  4. strFolder2="E:\B\"  '//目标目录,注意后面的反斜杠要加上
  5. Call CopyFiles(strFolder1)
  6. MsgBox "完成!"
  7. WScript.Quit
  8. Sub CopyFiles(strPath)
  9.   Dim Folder,subFolders,Files,File,fso
  10.   Set fso = CreateObject("Scripting.FileSystemObject")
  11.   Set Folder = fso.Getfolder(strPath)
  12.   Set subFolders = Folder.subFolders
  13.   Set Files = Folder.Files
  14.   For Each File In Files
  15.       fso.CopyFile File.Path,strFolder2,False '设置为false,表示如果文件存在则不覆盖
  16.       If Err.Number<>0 Then Err.Clear
  17.   Next
  18.   For Each subfolder In subFolders
  19.       CopyFiles(subFolder.Path) '递归查找子目录
  20.   Next
  21. End Sub
复制代码

作者: wc726842270    时间: 2011-2-14 02:06

学习了。有半年没看见RAPLACE了。呵呵,都快忘了
作者: zwbposer    时间: 2011-2-14 11:19     标题: 回复 5楼 的帖子

很感谢啊,但是你写的这个不能更新新文件啊,当我的目标文件夹下(包括下面的多级子目录)有新文件时,在运行你写的VBS时,就不会把新文件复制过去,而且你写的VBS只是把文件复制过去,我的目的是把整个文件夹都复制,包括它的文件结构目录,请指教
作者: broly    时间: 2011-2-14 12:13     标题: 回复 7楼 的帖子

貌似一开始没有这样说。。
— —!
作者: CrLf    时间: 2011-2-14 12:54

用文件夹A的文件更新文件夹B:
xcopy /u /e /y 文件夹A 文件夹B
作者: zwbposer    时间: 2011-2-14 12:56     标题: 回复 8楼 的帖子

之前写的不是很清楚,你那个完成提示很好啊,怎么用的呢
作者: zwbposer    时间: 2011-2-14 13:02     标题: 回复 9楼 的帖子

我想用vbs啊,bat的已经有了
作者: Spring    时间: 2011-2-14 16:36

为什么要用vbs呢,xcopy本身就可以,而且有很多详细的选项,可以满足各种需求。
  1. Option Explicit
  2. Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
  3. XCopy objFSO, "D:\A", "E:\B", False
  4. MsgBox "复制完成。", vbInformation, "完成"
  5. '********************************************************************
  6. '* Sub :     XCopy
  7. '*
  8. '* Purpose:  复制文件和目录树。
  9. '*
  10. '* Input:    fso            FileSystemObject 对象实例
  11. '*           source         指定要复制的文件。
  12. '*           destination    指定新文件的位置和/或名称。
  13. '*           overwrite      是否覆盖已存在文件。 Ture 覆盖, False 跳过
  14. '*
  15. '* Output:   -
  16. '*
  17. '********************************************************************
  18. Sub XCopy(fso, source, destination, overwrite)
  19.     Dim s, d, f, l
  20.     Set s = fso.GetFolder(source)
  21.     If Not fso.FolderExists(destination) Then
  22.         fso.CreateFolder destination
  23.     End If
  24.     Set d = fso.GetFolder(destination)
  25.     For Each f In s.Files
  26.         l = d.Path & "\" & f.Name
  27.         If Not fso.FileExists(l) Or overwrite Then
  28.             If fso.FileExists(l) Then
  29.                 fso.DeleteFile l, True
  30.             End If
  31.             f.Copy l, True
  32.         End If
  33.     Next
  34.     For Each f In s.SubFolders
  35.         XCopy fso, f.Path, d.Path & "\" & f.Name, overwrite
  36.     Next
  37. End Sub
复制代码

作者: broly    时间: 2011-2-14 17:49

原帖由 Spring 于 2011-2-14 16:36 发表
为什么要用vbs呢,xcopy本身就可以,而且有很多详细的选项,可以满足各种需求。Option Explicit

Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")

XCopy objFSO, "D:\A", "E:\B", False ...


既然春哥写了,我就不写了。

— —
作者: zwbposer    时间: 2011-2-14 19:32     标题: 回复 12楼 的帖子

哈哈,非常感谢,用VBS主要是隐蔽些,不用弹黑框框
作者: zwbposer    时间: 2011-2-14 19:33     标题: 回复 13楼 的帖子

感谢大家的热心帮助,哈哈
作者: hacker85    时间: 2012-7-6 10:41

回复 11# zwbposer


    可否放上你BAT的代码?




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