本帖最后由 batman 于 2011-5-26 16:42 编辑
fso文件系统对象:
vbs通过调用fso对象可以方便地实现对文件夹和文件的新建、查找、读取、修改、删除以及信息操作,其调用语法为Set fso = CreateObject("scripting.filesystemobject"),这个fso只是一个变量名,你可以用任意字符串来代替,如“myobject”。下面我们就辅以代码来简要说明一下通过调用fso对象如何实现对文件夹和文件的操作:
假如我们要在当前目录下创建一个名为test.txt的文本,并向其中写入数据“www.bathome.net”,那么可写下如下代码,并保存为test.vbs:- Dim fso, vbstr
- vbstr = "www.bathome.net"
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("test.txt", 2, 1).Write vbstr
- Set fso = Nothing
复制代码 双击test.vbs,就会在当前目录下新建一个test.txt文本,其中的内容为www.bathome.net。fso.OpenTextFile("test.txt", 2)中的2是表示操作的模式,常用的有三个值1、2、8,mode为1表示以读取的模式打开文本,mode为2, 1以写入的方式打开文本(如文本存在则覆盖),mode为8表示以改写的方式打开文本(紧接原文本内容后面写入)。至于后面的Write方法其实还有两种,一种Writeline方法(按行写),还有一种Writeblanklines(line)(指定写入多少行)。而相对于mode为1(读取方式),Read就有read(number)(指定读入多少个字符),Readall()方法(整版读取)和Readline(按行读取)方法。下面我们以代码一一示例:- Dim fso, vbstr
- vbstr = "www.bathome.net"
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("test.txt", 2).Write vbstr
- MsgBox fso.OpenTextFile("test.txt", 1).Read("3")
- MsgBox fso.OpenTextFile("test.txt", 1).Readall()
- MsgBox fso.OpenTextFile("test.txt", 1).Readline()
- Set fso = Nothing
复制代码 保存为test.vbs并运行会依次显示“www”,“www.bathome.net”,“www.bathome.net”信息,对于内容只有一行的文本readall和readline的内容肯定是一样的。在这里特别指出readline一般是与skipline(相当于批中的skip)结合在一起的,如下面的代码为新建有10行内容的test.txt,并读取其3-6行的内容:- Dim fso, vbstr
- For i = 1 To 10
- vbstr = vbstr & "www.bathome.net " & i & vbCrLf
- Next
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("test.txt", 2).Write vbstr
- Dim oread, vbvar
- Set oread = fso.OpenTextFile("test.txt", 1)
- For i = 1 To 2
- oread.SkipLine()
- Next
- For i = 1 To 4
- vbvar = vbvar & oread.ReadLine() & vbCrLf
- Next
- MsgBox vbvar
- oread.Close
- Set oread = Nothing
- Set fso = Nothing
复制代码 这种skip方法个人觉得比较麻烦,还不如用readall然后用split函数分割再去除前面的分割部分。好了,接着看代码:- Dim fso, vbstr, vbvar
- vbstr = "www.bathome.net"
- vbvar = "the best bbs of batcherweb"
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("test.txt", 2).Write vbstr
- fso.OpenTextFile("test.txt", 8).Write vbvar
- Set fso = Nothing
复制代码 保存为test.vbs并运行,会在当前目录生成test.txt并写入内容“www.bathome.netthe best bbs of batcherweb”,两句首尾相接没有了换行,这显然不是我们想要的,怎么解决呢?有两种方法:1、将wirte vbstr改为write vbstr & vbcrlf强制加上回车换行符,2、将write全改为wirteline。
上面所讲的全是针对ansi的操作,那要怎么实现对unicode写入操作呢?其实fso新建文本的方法并不是fso.OpenTextFile,而是fso.CreateTextFile,这个方法可以创建ansi文本也可以创建unicode文本,下面我们就用代码分别创建一个ansi文本和unicode文本,并分别写入“www.bat.home”数据:- Dim fso, vbstr
- vbstr = "www.bathome.net"
- Set fso = CreateObject("scripting.filesystemobject")
- fso.CreateTextFile("test.txt", 1, 0).Write vbstr
- fso.CreateTextFile("test1.txt", 1, 1).Write vbstr
- Set fso = Nothing
复制代码 保存为test.vbs并运行,会在当前目录下生成test.txt(ansi)和test1.txt(unicode),你查看两个文本的大小就会发现test1.txt是test.txt大小的两倍,只有unicode编码格式下的文本才能接受unicode字符的写入,在此就不展开也不加以示例了。注意,以上所有的代码都是运行在当前目录下,如果要对指定目录进行文件读写操作,则应加上其绝对或相对路径。
上面所讲的全是fso对于文本的操作,那么对于文件夹的操作呢?别急,我们继续往下来。先看代码:- Dim fso
- Set fso = CreateObject("scripting.filesystemobject")
- If Not fso.FolderExists("temp") Then fso.CreateFolder("temp")
- Set fso = Nothing
复制代码 上面代码的意思是如果在当前目录下没有发现temp文件夹则新建temp文件夹,在这里我们用到fso.FolderExists(对应还有fso.fileExists)和fso.CreateFolder(对应的文件创建在上面已经讲过了)两种方法,其中fso.FolderExists是查找文件夹,fso.CreateFolder是创建文件夹。那么我们要查找当前文件夹所有的文件又该如何做呢?请看代码:- Dim fso, vbstr
- Set fso = CreateObject("scripting.filesystemobject")
- Set ws = CreateObject("wscript.shell")
- For Each file In fso.GetFolder(ws.CurrentDirectory).Files
- vbstr = vbstr & file & vbCrLf
- Next
- MsgBox vbstr
- Set fso = Nothing
复制代码 虽然还没有讲到wscript.shell脚本对象,大家提前预习下吧,其CurrentDirectory方法就是获取当前路径的。大家运行代码可以看出当前文件夹下的所有文件及其路径都被列了出来。那么我们要列出文件的指定信息又要如何做呢,下面以一个文件为例来一一表叙:- Dim fso
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("my_new_test.txt", 2, 1).Write "www.bathome.net"
- Set oget = fso.GetFile("my_new_test.txt")
- MsgBox oget.Name & " 文件名"
- MsgBox oget.ShortName & " 文件短名"
- MsgBox fso.GetExtensionName("my_new_test.txt") & " 文件后缀名"
- MsgBox oget.Size & " 文件大小"
- MsgBox oget.Type & " 文件类型"
- MsgBox oget.Path & " 文件路径"
- MsgBox oget.ShortPath & " 文件短路径"
- MsgBox oget.ParentFolder & " 文件所在目录"
- MsgBox oget.Drive & " 文件所在盘符"
- MsgBox oget.DateCreated & " 文件合创建时间"
- MsgBox oget.DateLastModified & " 文件最后一次修改时间"
- MsgBox oget.DateLastAccessed & " 文件最后一次访问时间"
- Set fso = Nothing
复制代码 那么我们要把上面建立的这些文件和文件夹全部删除掉,又要使用什么方法呢?同时要把移动、复制、重命名文件又是什么方法呢?下面为大家一一说明。fso.DeleteFile(删除文件)、fso.DeleteFolder(删除文件夹)、fso.CopyFile(复制文件)、fso.CopyFolder(复制文件夹)、fso.MoveFile(移动文件)、fso.MoveFolder(移动文件夹),要指出的是fso没有重命名功能,但是我们可以先移动文件或文件夹为其它名字,再移回来就可以达到重命名原文件或文件夹的目的了。接下来就用代码来做简单演示:- Dim fso
- Set fso = CreateObject("scripting.filesystemobject")
- Set ws = CreateObject("wscript.shell")
- If Not fso.FolderExists("temp") Then fso.CreateFolder("temp")
- fso.OpenTextFile("test.txt", 2, 1).Write "www.bathome.net"
- fso.CopyFile "test.txt", "temp/new.txt"
- fso.MoveFile "temp/new.txt", ws.CurrentDirectory & "\"
- MsgBox "ok"
- fso.DeleteFile "new.txt"
- fso.DeleteFile "test.txt"
- fso.DeleteFolder "temp"
- Set fso = Nothing
复制代码 运行上面的代码在msgbox前就会实现一系列的创建、复制、移动动作,在msgbox后就会实现对文件和文件夹的删除。好了,鉴于本人的水平暂时只能对fso文件系统对象做如上简要说明,本人在论坛写过一个vbs全盘搜索文件的代码,大家也可以看看http://www.bathome.net/viewthrea ... hlight=%C8%AB%C5%CC,欢迎批评指教。 |