当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs将本地文件替换为在文件服务器上找到的新版本

VBScript
一个最简单的vbs类实例代码
实用vbs提醒小程序
使用vbs下载文件的代码加强版
vbs病毒制作之一复制自身的vbs脚本
用vbs实现的exe2swf工具脚本代码
vbs更改3389远程桌面端口的脚本
用vbs实现的强制杀进程的脚本
用VBS脚本实现更换Windows Xp序列号的代码
vbs实现右键菜单中添加CMD HERE
用VBS脚本删除指定以外的文件或文件夹
用VBS记录客户机操作的代码
用vbs删除某些类型文件和磁盘空间报告的脚本
两个批量挂马vbs脚本代码
关于vbs WebBrowser导航问题
LCL.VBS 病毒源代码
用vbs实现向任何电子邮件发送邮件
用VBS检测Guest状态的脚本
用vbs实现的输入助手附使用方法
vbs base64 解密脚本代码
用vbs实现修改dns的网关脚本

VBScript 中的 用vbs将本地文件替换为在文件服务器上找到的新版本


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 65 ::
收藏到网摘: n/a

问:
您好,脚本专家!如何将本地文件的修改日期与文件服务器上的副本进行比较,并且,如果本地文件的版本更旧,将其替换为文件服务器上的版本?
-- DC
答:
您好,DC。让我们想想,您是想将某些旧的东西替换为新的。不知道为什么,这让我们感到很不安。
嗯,并不是因为脚本专家正在变老,这得提醒您,我们没有。毕竟,膝盖和后背就应该是这么吱吱作响的;不然怎么知道它们在发挥作用呢?!?
注意:据说,当爱斯基摩人老得不中用的时候,他们会被抛弃在大块浮冰上任其自生自灭。幸好脚本专家都不是爱斯基摩人,而我们每天都要穿戴好外衣、手套和长统帽上班(包括夏天)。以防万一。
不过比起过时的脚本专家来说,您可能更关心过时的文件,是吧?下面这个脚本将替换本地文件 C:\Scripts\Test.txt(如果此文件正好比其在服务器 atl-fs-01 上的副本更旧):
复制代码 代码如下:

Const OverwriteExisting = TRUE
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLocalFile = objFSO.GetFile("c:\scripts\test.txt")
dtmLocalDate = objLocalFile.DateLastModified
Set objServerFile = objFSO.GetFile("\\atl-fs-01\public\test.txt")
dtmServerDate = objServerFile.DateLastModified
If dtmLocalDate < dtmServerDate Then
objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
End If
如您所见,这是个非常简短的小脚本。(我们必须承认除去有点困扰我们的过时的旧东西真的很容易。)我们首先创建一个名为 OverwriteExisting 的常量并将其值设置为 True。我们将使用此常量告诉 FileSystemObject 可以对目标文件的现有实例进行覆盖。默认情况下,如果某文件在驱动器 2 上已存在,则 FileSystemObject 不会将其从驱动器 1 复制到驱动器 2 上。
说到 FileSystemObject,我们在此脚本的下一行创建此对象 (Scripting.FileSystemObject) 的一个实例。然后,我们使用以下两行代码绑定到我们的第一个文件 (C:\Scripts\Test.txt),并将此文件的上次修改日期(DateLastModified 属性)存储在名为 dtmLocalDate 的变量中:
Set objLocalFile = objFSO.GetFile("c:\scripts\test.txt")
dtmLocalDate = objLocalFile.DateLastModified
然后,通过创建对服务器版本 Test.txt 的对象引用重复此过程。请注意,此处我们使用的变量名称不同:本地文件的对象引用存储在 objLocalFile 中,服务器文件的对象引用存储在 objServerFile 中。不用说,我们还使用了不同的变量 (dtmServerDate) 来存储此上次修改日期:
Set objServerFile = objFSO.GetFile("\\atl-fs-01\public\test.txt")
dtmServerDate = objServerFile.DateLastModified
仍在看吗?下一步我们需要确定本地文件是否比服务器文件更旧。下面这行代码就用来解决这个问题:
If dtmLocalDate < dtmServerDate Then
别被这的语法搞糊涂了。我们很容易假定旧文件的日期应该大于新文件。但实际上日期不是这么处理的。假定“文件 A”的修改日期为 2/1/2006,“文件 B”的修改日期为 2/15/2006。“文件 A”比较旧,这意味着“文件 A”的修改日期小于(即,产生早于)“文件 B”。
那么如果本地文件比其服务器副本更旧,如何将本地文件替换为服务器上找到的副本?方法如下:
objFSO.CopyFile objServerFile.Path, objLocalFile.Path, OverwriteExisting
正如您看到的,我们要做的就是调用 CopyFile 方法并向其传递三个参数:
? 我们想要复制的文件(即,服务器上找到的 Test.txt 版本)的路径。
? 我们想要将此文件复制到的路径。在本例中,即为本地文件的路径。
? 常量 OverwriteExisting,它用来告诉脚本继续进行,并使用从服务器复制的版本替换本地文件。
至此您已实现了您的目的。然而,请记住,此脚本仅适用于旧文件。您不能使用它来替换,嗯,老脚本专家。(当然,倒不是有人梦想过替换脚本专家。不过,还是以防万一 ...)