◎Vbs脚本编程简明教程之十一 ――FSO中文件的基本操作

 
◎Vbs脚本编程简明教程之十一 ——FSO中文件的基本操作
一、文件属性:
 
在windows中,文件的属性一般用数字来表示:
 
0代表normal,即普通文件未设置任何属性。    1代表只读文件。
 
2代表隐藏文件。    4代表系统文件。    16代表文件夹或目录。
 
32代表存档文件。 1024代表链接或快捷方式。例如:
 
set fs=wscript.createobject(“scripting.filesystemobject”)
 
set f=fs.getfile(“d:\\index.txt”)
 
msgbox f.Attributes ‘attributes函数的作用是显示文件属性
 
需要说明的是:msgbox显示的结果往往不是上面说明的数字,而是有关属性代表数字的和。
 
二、创建文件:object.createtextfile方法,注意创建前一般需要检查文件是否存在。
 
例如:set fso=wscript.createobject(“scripting.filesystemobject”)
 
if fso.fileexists(“c:\\kk.txt”) then
 
msgbox “文件已存在”
 
else
 
set f=fso.createtextfile(“c:\\kk.txt”)
 
end if
 
如需要强制覆盖已存在的文件,则在文件名后加true参数。
 
三、复制、移动、删除文件:使用copyfile方法、movefile方法、deletefile方法。例如:
 
set fso=wscript.createobject(“scripting.filesystemobject”)
 
fso.copyfile “c:\\kk.txt”,”d:\\1\\kk.txt”,true    //如上文说述,true代表强制覆盖
 
fso.movefile “c:\\kk.txt”, “d:\\” //移动文件
 
fso.deletefile “c:\\kk.txt” //删除文件
 
四、文件的读写:
 
1、打开文件:使用opentextfile方法
 
如:set ts=fso.opentextfile(“c:\\kk.txt”,1,true)
 
说明:第二个参数为访问模式1为只读、2写入、8为追加
 
第三个参数指定如文件不存在则创建。
 
2、读取文件:read(x)读x个字符;readline读一行;readall全部读取
 
如:set ffile=fso.opentextfile(“c:\\kk.txt”,1,true)
 
value=ffile.read(20)
 
line=ffile.readline
 
contents=ffile.readall
 
3、常见的指针变量:
 
atendofstream属性:当处于文件结尾的时候这个属性返回true。一般用循环检测是否到达文件末尾。例如:
 
do while ffile.atendofstream<>true
 
ffile.read(10)
 
loop
 
atendofline属性:如果已经到了行末尾,这个属性返回true。
 
Column属性(当前字符位置的列号)和line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1。
 
4、在文件中跳行:skip(x) 跳过x个字符;skipline 跳过一行
 
5、在文件中写入字符:可以用2-写入和8-追加的方式来写入
 
其方法有:write(x)写入x字符串;writeline(x)写入x代表的一行
 
writeblanklines(n) 写入n个空行
 
注意:最后一定要使用close方法关闭文件。读文件后一定要关闭,才能以写的方式打开。
 
◎Vbs脚本编程简明教程之十二—使用系统对话框
在VBS脚本设计中,如果能使用windows提供的系统对话框,可以简化脚本的使用难度,使脚本人性化许多,很少有人使用,但VBS并非不能实现这样的功能,方法当然还是利用COM对象。
 
1、SAFRCFileDlg.FileSave对象:属性有:FileName — 指定默认文件名;FileType —
 
指定文件扩展名;OpenFileSaveDlg — 显示文件保存框体方法。
 
2、SAFRCFileDlg.FileOpen 对象:FileName — 默认文件名属性;OpenFileOpenDlg — 显示打开文件框体方法。
 
3、UserAccounts.CommonDialog对象:Filter — 扩展名属性("vbs File|*.vbs|All Files|*.*");
 
FilterIndex — 指定
 
InitialDir — 指定默认的文件夹
 
FileName — 指定的文件名
 
Flags — 对话框的类型
 
Showopen方法:
 
很简单,ok,让我们来举两个简单的例子:
 
例一:保存文件
 
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
objDialog.FileName = "test"
 
objDialog.FileType = ".txt"
 
intReturn = objDialog.OpenFileSaveDlg
 
If intReturn Then
 
objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)
 
Else
 
Wscript.Quit
 
End If
 
注意:1、SAFRCFileDlg.FileSave对象仅仅是提供了一个方便用户选择的界面,本身并没有保存文件的功能,保存文件还需要使用FSO对象来完成。2、用FileType属性来指定默认的文件类型。3、在调用OpenFileSaveDlg方法时,最好把返回值保存到一变量中,用它可以判断用户按下的是确定还是取消。
 
例二:.打开文件
 
set objFile = CreateObject("SAFRCFileDlg.FileOpen")
 
intRet = objFile.OpenFileOpenDlg
 
if intret then
 
msgbox “文件打开成功!文件名为:” & objFile.filename
 
else
 
wscript.quit
 
end if
 
例三:比较复杂的打开文件对话框
 
Set objDialog = CreateObject("UserAccounts.CommonDialog")
 
objDialog.Filter = "vbs File|*.vbs"
 
objDialog.InitialDir = "c:\\"
 
tfile=objDialog.ShowOpen
 
if tfile then
 
strLoadFile = objDialog.FileName
 
msgbox strLoadFile
 
else
 
wscript.quit
 
end if
 
说明:在脚本中加入 objDialog.Flags = &H020 看看会出现什么结果。
 
 
◎Vbs脚本编程简明教程之十三 —使用dictionary对象
VBS中存在一个特殊的对象-dictionnary,是一个集合对象。一般情况霞,我把这个特殊的集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务,无须担心数据是在哪些行列,而是使用唯一的键进行访问或者是一个只能运行在内存中的数据库,并只有两个字段分别是:key和item,在使用中,字段key是索引字段。
 
set sdict=CreateObject("Scripting.Dictionary")
 
sdict.add "a","apple"
 
sdict.add "b","banana"
 
sdict.add "c","copy"
 
for each key in sdict.keys
 
msgbox      "键名" &    key     & "是" & " = " & sdict (key)
 
next
 
sdict.removeall
 
这个脚本很简单,就是定义了一个 dictionary 对象的实例sdict,并加入了三条数据,然后对每一条数据进行了枚举,最后,将对象的实例清空。
 
Dictionary 对象的成员概要
 
属性和说明
 
CompareMode     设定或返回键的字符串比较模式
 
Count      只读。返回 Dictionary 里的键/条目对的数量
 
Item(key) 设定或返回指定的键的条目值
 
Key(key) 设定键值
 
方法和说明
 
Add(key,item) 增加键/条目对到 Dictionary
 
Exists(key) 如果指定的键存在,返回 True,否则返回 False
 
Items() 返回一个包含 Dictionary 对象中所有条目的数组
 
Keys() 返回一个包含 Dictionary 对象中所有键的数组
 
Remove(key) 删除一个指定的键/条目对
 
       RemoveAll()   删除全部键/条目对
 
◎Vbs脚本编程简明教程之十四—VBS内置函数
Abs 函数:返回数的绝对值。
 
Array 函数:返回含有数组的变体。
 
Asc 函数:返回字符串首字母的 ANSI 字符码。
 
Atn 函数:返回数值的反正切。
 
CBool 函数:返回已被转换为 Boolean 子类型的变体的表达式。
 
CByte 函数:返回已被转换为字节子类型的变体的表达式。
 
CCur 函数:返回已被转换为货币子类型的变体的表达式。
 
CDate 函数:返回已被转换为日期子类型的变体的表达式。
 
CDbl 函数:返回已被转换为双精度子类型的变体的表达式。
 
Chr 函数:返回与指定的 ANSI 字符码相关的字符。
 
CInt 函数:返回已被转换为整形子类型的变体的表达式。
 
CLng 函数;返回已被转换为Long子类型的变体的表达式。
 
Cos 函数:返回角度的余弦。
 
CreateObject 函数:创建并返回对“自动”对象的引用。
 
CSng 函数:返回已被转换为单精度子类型的变体的表达式。
 
CStr 函数:返回已被转换为字符串子类型的变体的表达式。
 
Date 函数:返回当前系统日期。
 
DateAdd 函数:返回的日期已经加上了指定的时间间隔。
 
DateDiff 函数:返回两个日期之间的间隔。
 
DatePart 函数:返回给定日期的指定部分。
 
DateSerial 函数:返回指定年月日的日期子类型的变体。
 
DateValue 函数:返回日期子类型的变体。
 
Day 函数:返回日期,取值范围为 1 至 31。
 
Eval 函数:计算表达式并返回结果。
 
Exp 函数:返回 e (自然对数的底) 的多少次方。
 
Filter 函数:根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。
 
Fix 函数:返回数的整数部分。
 
FormatCurrency 函数:返回的表达式为货币值格式,其货币符号采用系统控制面板中定义的。
 
FormatDateTime 函数:返回的表达式为日期和时间格式。
 
FormatNumber 函数:返回的表达式为数字格式。
 
FormatPercent 函数:返回的表达式为百分数(乘以 100)格式,后面有 % 符号。
 
GetObject 函数:返回从文件对“自动”对象的引用。
 
GetRef 函数:返回对能够绑定到一事件的过程的引用。
 
Hex 函数:返回一字符串,代表一个数的十六进制值。
 
Hour 函数:返回表示钟点的数字,取值范围为 0 至 23。
 
InputBox 函数:在对话框中显式一提示,等待用户输入文本或单击按钮,并返回文本框的内容。
 
InStr 函数:返回一个字符串在另一个字符串中首次出现的位置。
 
InStrRev 函数;返回一个字符串在另一个字符串中出现的位置,但是从字符串的尾部算起。
 
Int 函数:返回数的整数部分。
 
IsArray 函数:返回 Boolean 值,反映变量是否为数组。
 
IsDate 函数:返回 Boolean 值,反映表达式能否转换为日期。
 
IsEmpty 函数:返回 Boolean 值,反映变量是否已被初始化。
 
IsNull 函数:返回 Boolean 值,反映表达式是否含有无效数据(Null)。
 
IsNumeric 函数:返回 Boolean 值,反映表达式能否转换为数字。
 
IsObject 函数:返回 Boolean 值,反映表达式是否引用了有效的“自动”对象。
 
Join 函数:返回通过连接许多含有数组的子串而创建的字符串。
 
LBound 函数;返回指定维数数组的最小有效下标。
 
LCase 函数:返回的字符串已被转换为小写字母。
 
Left 函数:返回字符串最左边的指定数量的字符。
 
Len 函数:返回字符串中的字符数或存储变量所需的字节数。
 
LoadPicture 函数:返回图片对象。只用于 32 位平台。
 
Log 函数:返回数的自然对数。
 
LTrim 函数;返回去掉前导空格的字符串。
 
Mid 函数:从字符串中返回指定数量的字符。
 
Minute 函数:返回分钟数,取值范围为 0 至 59。
 
Month 函数:返回表示月份的数,取值范围为 1 至 12。
 
MonthName 函数:返回表示月份的字符串。
 
MsgBox 函数:在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。
 
Now 函数:返回计算机的当前系统日期和时间。
 
Oct 函数:返回表示该数八进制数值的字符串。
 
Replace 函数:返回一字符串,其中指定的子串已被另一个子串替换了规定的次数。
 
RGB 函数:返回代表 RGB 颜色值的数字。
 
Right 函数:返回字符串最右边的指定数量的字符。
 
Rnd 函数:返回随机数。
 
Round 函数:返回指定位数、四舍五入的数。
 
RTrim 函数:返回去掉尾部空格的字符串副本。
 
ScriptEngine 函数:返回反映使用中的脚本语言的字符串。
 
ScriptEngineBuildVersion 函数:返回使用中的脚本引擎的编译版本号。
 
ScriptEngineMajorVersion 函数:返回使用中的脚本引擎的主版本号。
 
ScriptEngineMinorVersion 函数:返回使用中的脚本引擎的次版本号。
 
Second 函数:返回秒数,取值范围为 0 至 59。
 
Sgn 函数:返回反映数的符号的整数。
 
Sin 函数:返回角度的正弦值。
 
Space 函数:返回由指定数量的空格组成的字符串。
 
Split 函数:返回下限为 0 的、由指定数量的子串组成的一维数组。
 
Sqr 函数:返回数的平方根。
 
StrComp 函数:返回反映字符串比较结果的数值。
 
String 函数:返回指定长度的重复字符串。
 
StrReverse 函数:返回一字符串,其中字符的顺序与指定的字符串中的顺序相反。
 
Tan 函数:返回角度的正切值。
 
Time 函数:返回表示当前系统时间的“日期”子类型的“变体”。
 
Timer 函数:返回时经子夜 12:00 AM 后的秒数。
 
TimeSerial 函数:返回含有指定时分秒时间的日期子类型的变体。
 
TimeValue 函数:返回含有时间的日期子类型的变体。
 
Trim 函数:返回去掉前导空格或尾部空格的字符串副本。
 
TypeName 函数:返回一字符串,它提供了关于变量的变体子类型信息。
 
UBound 函数:返回指定维数数组的最大有效下标。
 
UCase 函数:返回的字符串已经被转换为大写字母。
 
VarType 函数:返回标识变体子类型的数值。
 
Weekday 函数:返回表示星期几的数值。
 
WeekdayName 函数:返回表示星期几的字符串。
 
Year 函数:返回表示年份的数值。
 
◎Vbs脚本编程简明教程之十五——响应事件
 
什么是事件?在我看来,事件就象我们手机上的闹钟,闹钟一响,我们就要去做某些特定的事情。或者这样说,事件就像警钟,当程序运行时,有特殊的事情发生,就会激发事件,事件本身就是一条消息,如果你编写的脚本要对事件进行处理,就需要一个特殊的过程或者函数来接受和处理事件。那么这个特殊的过程或者函数在程序运行时,就不断的监听,看系统是否传来了相应的事件,一旦接受到事件,脚本对此作出反应。
 
那么事件是从那里来的呢?是否需要我们在脚本中对事件进行编写呢?一般情况下,事件是某个程序在运行中的特殊状态发出的,我们不需要对事件进行编写,只需要编写处理事件的函数。比如说我们用vbs建立了ie的一个实例,那么当ie的窗口被关闭的时候,就会激发出一个叫做OnQuit的事件。
 
是不是脚本自然而然就能接受事件并进行处理呢?我们说不是的,在创建对象的时候,我们将使用WSH的createobject命令,例如:
 
Set objie=Wscript.createobject(“internetexplorer.application”,”event_”)
 
注意到了吗?多了一个参数,这个参数的作用是什么呢?它叫做事件接收端,当脚本连接的对象包含事件时,如果对象调用的事件是OnBegin,那么WSH将会在脚本中调用一个event_OnBegin的事件处理程序。当然事件接受端并不是固定的,如果对象将其定义为MyObj_的话,那么事件处理程序将是:MyObj_OnBegin。
 
是否很熟悉?在打造个性化QQ一讲中,曾经出现过Window_OnSize(cx,cy)函数,它其实就是一个事件处理程序。
 
让我们来举个实际的例子完整的看看事件的处理过程:
 
Set objie=WScript.CreateObject("InternetExplorer.Application","event_")
 
objie.Visible=True
 
MsgBox "请关闭浏览器窗口看看效果!",vbSystemModal
 
Wscript.sleep 6000
 
MsgBox "现在已经正常关闭了"
 
Sub event_onquit()
 
MsgBox "您确定要关闭浏览器吗?",vbSystemModal
 
End Sub
 
这段脚本打开了一个IE窗口,然后要求你关闭IE窗口,当你关闭窗口的时候,自动调用事件响应程序。
 
qtp测试:vbs对于文本的读写
 
\'读出文本所有内容
Function ReadTxt(pathway)
 
Dim fso,myfile,i
\'Dim ReadLine(10)
Set fso=CreateObject("Scripting.FileSystemObject")
If fso.FileExists(pathway) Then
   Set myfile=fso.OpenTextFile(pathway,1,False)
Else
WScript.Echo "该文档不存在"
End If
i=0
If Not myfile.AtEndOfStream Then
   While Not myfile.AtEndOfLine
      \'ReadLine(i)=myfile.ReadLine()
      \'ReadLine=ReadLine&" "&myfile.ReadLine()\'将所有行数据合在一起
       ReadLine=myfile.ReadAll()
   Wend
 
Else
ReadLine="文件内容为空"
End If
 
myfile.Close()
WScript.Echo ReadLine
End Function
 
\'逐行写入文本数据
Function WriteTxt(pathway,content)
Dim fso,myfile
 
Set fso=CreateObject("Scripting.FileSystemObject")
ON Error Resume Next
If Not fso.FileExists(pathway) Then
   fso.CreateTextFile(pathway)
End If
Set myfile=fso.OpenTextFile(pathway,8,True)
myfile.WriteLine(content)
myfile.Close()
If Err.Number<>0 Then
WScript.Echo Err.Number&Err.Description&" "&Err.Source
End if
End Function
 
\'调用读写函数
Call WriteTxt("C:\\Documents and Settings\\Administrator\\桌面\\3.txt","hoho,写入数据测试")

你可能感兴趣的:(◎Vbs脚本编程简明教程,FSO中文件的基本操作)