标题: [问题求助] 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
- On Error Resume Next
- Dim strFolder1,strFolder2
- strFolder1="D:\A" '//要查找的目录
- strFolder2="E:\B\" '//目标目录,注意后面的反斜杠要加上
- Call CopyFiles(strFolder1)
- MsgBox "完成!"
- WScript.Quit
- Sub CopyFiles(strPath)
- Dim Folder,subFolders,Files,File,fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set Folder = fso.Getfolder(strPath)
- Set subFolders = Folder.subFolders
- Set Files = Folder.Files
- For Each File In Files
- fso.CopyFile File.Path,strFolder2,False '设置为false,表示如果文件存在则不覆盖
- If Err.Number<>0 Then Err.Clear
- Next
- For Each subfolder In subFolders
- CopyFiles(subFolder.Path) '递归查找子目录
- Next
- 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本身就可以,而且有很多详细的选项,可以满足各种需求。- Option Explicit
-
- Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
-
- XCopy objFSO, "D:\A", "E:\B", False
-
- MsgBox "复制完成。", vbInformation, "完成"
-
- '********************************************************************
- '* Sub : XCopy
- '*
- '* Purpose: 复制文件和目录树。
- '*
- '* Input: fso FileSystemObject 对象实例
- '* source 指定要复制的文件。
- '* destination 指定新文件的位置和/或名称。
- '* overwrite 是否覆盖已存在文件。 Ture 覆盖, False 跳过
- '*
- '* Output: -
- '*
- '********************************************************************
- Sub XCopy(fso, source, destination, overwrite)
- Dim s, d, f, l
- Set s = fso.GetFolder(source)
- If Not fso.FolderExists(destination) Then
- fso.CreateFolder destination
- End If
- Set d = fso.GetFolder(destination)
- For Each f In s.Files
- l = d.Path & "\" & f.Name
- If Not fso.FileExists(l) Or overwrite Then
- If fso.FileExists(l) Then
- fso.DeleteFile l, True
- End If
- f.Copy l, True
- End If
- Next
- For Each f In s.SubFolders
- XCopy fso, f.Path, d.Path & "\" & f.Name, overwrite
- Next
- 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://bathome.net./) |
Powered by Discuz! 7.2 |