边听音乐边工作
文中有彩蛋!
阅读本文需要有VBS(Visual Basic Scripting)语言的基本编程,属于中级教程。VBS对于Windows简直如直刺心脏的利剑,软件测试人员学会使用它是必须哒!就算不是计算机编程人员,不是软件测试人员,也建议你掌握VBS语言,这是一个最好玩,最小巧,简单易学,又最有用,不需要安装任何平台的语言啦!其实只要你初步了解任何一门语言,也能看懂这个教程的。
平时,工作常常需要对Windows文件系统进行增删改查的工作。
对于需要批量进行文件操作的时候,反复做相同的事费事费力,此时VBS就可以帮上大忙了。
例如,我们临时要将大量的word文档转换为pdf文件,是不是要上网搜小软件又怕有病毒木马?不要着急下载小软件,自己动手就可以轻松解决这些问题。
VBS处理文件管理的小栗子
—
用记事本把下面这段代码【1】,存为vbs文件,保存在需要批量转换文件的文件夹下,直接运行。
On Error Resume Next
Const wdExportFormatPDF = 17
Set oWord = WScript.CreateObject("Word.Application")
Set fso = WScript.CreateObject("Scripting.Filesystemobject")
Set fds=fso.GetFolder(".")
Set ffs=fds.Files
For Each ff In ffs
If (LCase(Right(ff.Name,4))=".doc" Or LCase(Right(ff.Name,4))="docx" ) And Left(ff.Name,1)"~" Then
Set oDoc=oWord.Documents.Open(ff.Path)
odoc.ExportAsFixedFormat Left(ff.Path,InStrRev(ff.Path,"."))&"pdf",wdExportFormatPDF
If Err.Number Then
MsgBox Err.Description
End If
End If
Next
odoc.Close
oword.Quit
Set oDoc=Nothing
Set oWord =Nothing
MsgBox "Word文件已全部轩换为PDF格式!"
短短的20行代码就解决问题啦。所有当前目录下的word文档都转换为pdf文件。怎么样?很方便吧?
那就让我们我们开始学起来吧!
彩蛋来咯!
VBS运行Windows系统程序
—
Vbs其实是一种简单的Basic语言,进行简单的没有什么神奇的,只提供了编程的一个基本框架,用户可以使用Vbs来定义变量、过程和函数,vbs也提供了一些内部函数和对象,但是它提供了一条极为方便、功能也相当强的命令——CreateObject,这条命令可以访问windows系统内安装的所有com对象,并且可以调用这些部件中存放的命令。
WSH也就是用来解析Vbs的宿主,本身包含了几个常用对象:
1、Scripting.FileSystemObject—> 提供一整套文件系统操作函数
2、Scripting.Dictionary—> 用来返回存放键值对的字典对象
3、Wscript.Shell—> 提供一套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置
4、Wscript.NetWork—> 提供网络连接和远程打印机管理的函数。(其中,所有Scripting对象都存放在SCRRUN.DLL文件中,所有的Wscript对象都存放在WSHOM.ocx文件中。)
如何使用FSO对象返回一个TextStream对象,此对象可以被读取与写入:
CreateObject 函数返回 FileSystemObject 对象 (fso)。CreateTextFile 方法创建一个文件作为 TextStream 对象 (a),然后 WriteLine 方法在此文件中写入一行文本。最后 Close 方法刷新缓冲区并关闭文件。
FSO对象模型
—
FSO,全称FileSystemObject。文件系统是所有操作系统最重要的部分之一,脚本经常会需要对文件及文件夹进行访问和管理,对微软的office产品直接操作,在Vbs中对桌面和文件系统进行访问的顶级对象是FileSystemObject(FSO),这个对象特别复杂,是vbs进行文件操作的核心。
例如,不但可以对文件进行操作,对Excel直接进行操作:
Drive对象:包含储存设备的信息,包括硬盘、光驱、ram盘、网络驱动器
Drives集合:提供一个物理和逻辑驱动器的列表
File对象:检查和处理文件
Files集合:提供一个文件夹中的文件列表
Folder对象:检查和处理文件夹
Folders集合:提供文件夹中子文件夹的列表
Textstream对象:读写文本文件
设计FSO
—
FSO对象模式编程,分三步:
使用CreateObject方法来创建FSO对象
在新创建对象上使用适当的方法
访问对象的属性。
FSO 对象模式包含在 Scripting 类型库中,该库位于 Scrrun.dll 文件中。因而,要使用 FSO 对象模式,必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中。
创建FSO对象
这其实是创建了FSO的一个实例。也可以这样来写:
Scripting 是类型库的名字,而 FileSystemObject 则是想要创建的对象的名字。
使用适当的方法
例如,要创建一个新的对象,则使用CreateTextFile或CreateFolder(FSO 对象模式不支持驱动器的创建或删除)。要删除对象,则使用FSO对象DeleteFile和DeleteFolder方法,或File和Folder对象的Delete方法。也可以使用适当的方法,来复制和移动文件与文件夹。
FSO的常见方法:
BulidPath:把文件路径信息添加到现有的文件路径上
CopyFile:复制文件(第2个参数若为true,表示覆盖)
CopyFolder:复制文件夹
CreateFolder:创建文件夹
CreateTextFile:创建文本并返回一个TextStream对象
DeleteFile:删除文件
DeleteFolder:删除文件夹及其中所有内容,如果有子文件夹也都删除
DriveExits:确定驱动器是否存在
FileExits:确定一个文件是否存在
FolderExists:确定某文件夹是否存在
GetAbsolutePathName:返回一个文件夹或文件的绝对路径
GetBaseName:返回一个文件或文件夹的基本路径
GetDrive:返回一个dreve对象
GetDriveName:返回一个驱动器的名字
GetExtensionName:返回扩展名
GetFile:返回一个file对象
GetFileName:返回文件夹中文件名称
GetFolder:返回一个文件夹对象
GetParentFolderName:返回一个文件夹的父文件夹
GetSpecialFolder:返回指向一个特殊文件夹的对象指针
GetTempName:返回一个可以被createtextfile使用的随机产生的文件或文件夹的名称
MoveFile:移动文件
MoveFolder:移动文件夹
OpenTextFile:打开一个存在的文件并返回一个TextStream对象
做个小练习:检测C:\temp文件夹是否存在,如果存在则拷贝到D盘,并且删除,如果不存在,则建立文件夹。
Dim fso,s
Set fso=WScript.CreateObject("Scripting.fileSystemObject")
If(fso.FolderExists("c:\temp")) Then '判断文件夹是否存在
s="已经存在"
'存在,则拷贝到D盘
fso.Copyfolder "c:\temp","d:\temp"
s=s+",已经拷贝"
fso.Deletefolder("c:\temp")
Else
s="不存在"
Set foldr=fso.CreateFolder("c:\temp") '不存在则建立
End If
Msgbox(s)
Set fso=nothing
可以使用统配符,来方便操作:
访问与处理现有驱动器和文件夹
—
要访问现有驱动器、文件或文件夹,则使用 FileSystemObject 对象中的适当的 "get" 方法:
GetDrive
GetFolder
GetFile
访问现有文件:
不要对新创建的对象使用 "get" 方法,因为 "create" 函数已经返回那个对象的一个句柄。例如,如果使用 CreateFolder方法创建了一个新的文件夹,则不要使用 GetFolder 方法来访问它的属性,如 Name、Path、Size等等。只需设一个变量给 CreateFolder 函数,来获得新创建文件夹的句柄名,然后访问它的属性、方法和事件。
要在 VBScript 中这样做,则使用下面的代码:
获取有关驱动器的信息:
可以用 Drive 对象来获得有关各种驱动器的信息,这些驱动器是实物地或通过网络连接到系统上的。它的属性可以用来获得下面的信息内容:
驱动器的总容量,以字节为单位(TotalSize 属性)
驱动器的可用空间是多少,以字节为单位(AvailableSpace 或 FreeSpace 属性)
哪个号被赋给了该驱动器(DriveLetter 属性)
驱动器的类型是什么,如可移动的、固定的、网络的、CD-ROM 或 RAM 磁盘(DriveType 属性)
驱动器的序列号(SerialNumber 属性)
驱动器使用的文件系统类型,如 FAT、FAT32、NTFS 等等(FileSystem 属性)
驱动器是否可以使用(IsReady 属性)
共享和/或卷的名字(ShareName 和 VolumeName 属性)
驱动器的路径或根文件夹(Path 和 RootFolder 属性)
Drive对象的用法示例:
s = "Drive " & UCase(drvPath) & " - "
s = s & drv.VolumeName & "----"
s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
s = s & " Kb" & "---"
s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
s = s & "Kb"
End Sub
处理文件夹:
使用 Folder 和 FileSystemObject 对象,来操作文件夹和获得有关它们的信息:
Sub ShowFolderInfo()
Dim fso, fldr, s ' 获得 FileSystemObject 的实例。
Set fso = CreateObject("Scripting.FileSystemObject") ' 获得 Drive 对象。
Set fldr = fso.GetFolder("c:")
' 打印父文件夹名字。
Msgbox "Parent folder name is: " & fldr
' 打印驱动器名字。
Msgbox "Contained on drive " &fldr.Drive
' 打印根文件名。
If fldr.IsRootFolder= True Then
Msgbox "This is the root folder."
Else
Msgbox "This folder isn't a root folder."
End If
' 用 FileSystemObject 对象创建新的文件夹。
fso.CreateFolder ("C:\Bogus")
Msgbox "Created folder C:\Bogus"
' 打印文件夹的基本名字。
Msgbox "Basename = " & fso.GetBaseName("c:\bogus")
' 删除新创建的文件夹。
fso.DeleteFolder ("C:\Bogus")
Msgbox "Deleted folder C:\Bogus"
End Sub
处理文件:
有两种主要的文件处理类型:
创建、添加或删除数据,以及读取文件
移动、复制和删除文件
创建文本(三种方式)
Dim fso,f1
Set fso=CreateObject("Scripting.FileSystemObject")
Set f1=fso.CreateTextFile("C:\testfile.txt",True)
Dim fso,f2
Const ForWriting=2
Set fso=CreateObject("Scripting.FileSystemObject")
Set f2=fso.OpenTextFile("c:\test.txt",ForWriting,True)
写文件:
一旦创建了文本文件,使用下面的三个步骤向文件添加数据:
打开文本文件。
写入数据。
关闭文件。
读文件:
(ReadAll)
Sub WriteFiles
Dim fso,tf
Set fso=CreateObject("Scripting.FileSystemObject")
Set tf=fso.CreateTextFile("C:\testfile.txt",True)
'写一行,并且带有新行字符
tf.WriteLine("Testing 1,2,3.")
'写一行
tf.Write("This is a test.")
'向文件写三个新行字符
tf.WriteBlankLines(3)
tf.close
End Sub
Sub ReadFiles
Dim fso,ts,s
Const ForReading=1
Set fso=CreateObject("Scripting.FileSystemObject")
Set ts=fso.OpenTextFile("C:\testfile.txt",ForReading)
Msgbox "Reading file"
s=ts.ReadLine
Msgbox s
ts.close
End Sub
移动、删除和复制文件:
在驱动器 C 的根目录中创建一个文本文件,向其中写一些信息,然后把它移动到 \tmp 目录中,并在 \temp 中做一个备份,最后把它们从两个目录中删掉。
Sub ManipFiles
Dim fso,f1,f2,f3
Set fso=CreateObject("Scripting.FileSystemObject")
Set f1=fso.CreateTextFile("C:\testfile.txt",True)
Msgbox "Writing file"
f1.Write("This is a test")
f1.close
Msgbox "Moving file to C:\tmp"
Set f2=fso.getFile("C:\testfile.txt")
If not fso.FolderExists("C:\tmp") Then
Set foldr=fso.CreateFolder("C:\tmp")
Else
If fso.FileExists("C:\tmp\testfile.txt") Then
fso.DeleteFile("C:\tmp\testfile.txt")
End If
End If
f2.Move("C:\tmp\testfile.txt")
Msgbox "Copying file to c:\temp"
If not fso.FolderExists("C:\temp") Then
Set foldr=fso.CreateFolder("C:\temp")
End If
f2.Copy("C:\temp\testfile.txt")
Msgbox "Moving file to c:\temp"
Set f2=fso.GetFile("C:\tmp\testfile.txt")
Set f3=fso.GetFile("C:\temp\testfile.txt")
f2.Delete
f3.Delete
fso.DeleteFolder("C:\temp")
fso.DeleteFolder("C:\tmp")
Msgbox "All Done!"
End Sub
常见的指针变量:
atendofstream属性:当处于文件结尾的时候这个属性返回true。一般用循环检测是否到达文件末尾。例如:do while ffile.atendofstreamtrue
ffile.read(10)
loop
atendofline属性:如果已经到了行末尾,这个属性返回true。
Column属性(当前字符位置的列号)和line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1。
在文件中跳行:skip(x)跳过x个字符;skipline跳过一行
在文件中写入字符:可以用2-写入和8-追加的方式来写入
其方法有:write(x)写入x字符串;writeline(x)写入x代表的一行
writeblanklines(n) 写入n个空行
注意:最后一定要使用close方法关闭文件。读文件后一定要关闭,才能以写的方式打开。
一旦有了对象的句柄,就可以访问它的属性。例如,要获得特定文件夹的名字,首先创建该对象的一个实例,然后用适当的方法获得它的句柄(在这个例子中是 GetFolder 方法,因为该文件夹已经存在了)。
在windows中,文件的属性(f.Attributes)一般用数字来表示:
0代表normal,即普通文件未设置任何属性。 1代表只读文件。
2代表隐藏文件。 4代表系统文件。 16代表文件夹或目录。
32代表存档文件。 1024代表链接或快捷方式。
系统文件夹
—
一般指的系统文件夹:\windows\system32,临时文件夹,windows文件夹,例如
setfs=wscript.createobject(“scripting.filesystemobject”)
setwshshell=wscript.createobject(“wscript.shell”)
osdir=wshshell.expandenvironmentstrings(“%systemroot%”)
set f =fs.getfolder(osdir)
wscript.echo f
当然,还有简单的方法那就是使用getspecialfolder()
这个方法使用3种值:
表示windows文件夹,相关常量是windowsfolder
1系统文件夹,相关常量是systemfolder
2临时目录,相关常量temporaryfolder
例如:
setfs=wscript.createobject(“scripting.filesystemobject”)
setwfolder=fs.getspecialfolder(0) ‘返回windows目录
setwfolder=fs.getspecialfolder(1) ‘返回system32\
setwfolder=fs.getspecialfolder(2)'返回临时目录
【参考资料】
1、https://www.cnblogs.com/Mr-nie/p/8029085.html
2、http://www.jb51.net/shouce/vbscript/index.html
3、《VBS脚本教程》
4、《VBScript Third Edition》
如果阅读本文有收获,您的打赏支持与肯定将是对作者最大的鼓励!诚挚感谢!
领取专属 10元无门槛券
私享最新 技术干货