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

[问题求助] 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 编辑 ]

替换目标目录的与其子目录下所有1.txt文件:
replace /s /r 1.txt 目标目录

TOP

额,我完全新手,听不懂,可以提供完全代码嘛,我好对比

TOP

回复 2楼 的帖子

额,我完全新手,听不懂,可以提供完全代码嘛,我好对比

TOP

  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
复制代码
---学无止境---

TOP

学习了。有半年没看见RAPLACE了。呵呵,都快忘了
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

回复 5楼 的帖子

很感谢啊,但是你写的这个不能更新新文件啊,当我的目标文件夹下(包括下面的多级子目录)有新文件时,在运行你写的VBS时,就不会把新文件复制过去,而且你写的VBS只是把文件复制过去,我的目的是把整个文件夹都复制,包括它的文件结构目录,请指教

TOP

回复 7楼 的帖子

貌似一开始没有这样说。。
— —!
---学无止境---

TOP

用文件夹A的文件更新文件夹B:
xcopy /u /e /y 文件夹A 文件夹B

TOP

回复 8楼 的帖子

之前写的不是很清楚,你那个完成提示很好啊,怎么用的呢

TOP

回复 9楼 的帖子

我想用vbs啊,bat的已经有了

TOP

为什么要用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
复制代码

TOP

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

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

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


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

— —
---学无止境---

TOP

回复 12楼 的帖子

哈哈,非常感谢,用VBS主要是隐蔽些,不用弹黑框框

TOP

回复 13楼 的帖子

感谢大家的热心帮助,哈哈

TOP

返回列表