WScript/VBScript 获取脚本所在文件夹及任意文件所在目录路径

Windows脚本宿主(Windows Scripting Host或WSH)确实给我们编写本地脚本带来了方便,但是如何获取脚本文件自身目录或者是任意文件所在的目录路径呢?在Win32编程中我们可以通过PathRemoveFileSpec这样的Path*系列API,来对文件路径进行处理,当然这里是脚本,正常情况下没有访问Win32 API的权限,不过也有变通的办法来实现类似的功能。

下面我以获取脚本所在文件夹目录路径为例,讲解一下如何处理这类问题,WSH为我们提供了一个环境变量,名称为WScript.ScriptFullName或者写成WSH.ScriptFullName,通过直接输出变量,我们很容易得到脚本的全路径,当然这个是包含脚本名称的,类似于C:\ScriptsFolder\Sample.vbs这样的路径,如何得到C:\ScriptsFolder\呢?比如我们要向这个目录下写入配置文件,大家肯定会想到,我们去掉Sample.vbs不就可以了,是的,这是个办法,当然去掉的办法有很多,比如说基本的InStrRev函数,查找\斜杠,然后再Left截取字符串,这个思路就形成了我们第一个函数PathRemoveFileSpec1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Function PathRemoveFileSpec1(strFileName)
  ' 将类Unix路径 / 替换为 \
  strFileName = Replace(strFileName, "/", "\")
 
  Dim iPos
  ' 从路径末尾开始搜索\,这样从第一个字符到这个位置
  ' 就是我们所需要的
  iPos = InStrRev(strFileName, "\")
  ' 使用Left保留需要的部分
  PathRemoveFileSpec1 = Left(strFileName, iPos)
End Function
 
' 测试输出
WScript.Echo PathRemoveFileSpec1(WScript.ScriptFullName)

继续阅读“WScript/VBScript 获取脚本所在文件夹及任意文件所在目录路径”

VBScript 读取或者修改文件的属性信息

今天在Scripting Guy上看到一段有趣的脚本即获取和设置一个文件的属性,何为文件属性?当你对一个文件右击查看属性并切换到详细信息时,你就会发现这些信息:

Word文件属性.png

下面主要介绍如何利用脚本读取或者修改这些信息。谈到脚本的文件操作,大家首先想到的恐怕是FSO(FileSystemObject)组件吧,但是很遗憾FSO组件不支持对这些信息的操作,脚本专家的《如何向文档的“备注”字段写入信息?》提供了一个微软的COM组件Microsoft Developer Support OLE File Property Reader 2.1 Sample (KB 224351)即Dsofile可以帮我们实现这个需求,安装解压后惊喜的发现其提供了C++源代码和VB6和VB7的演示代码,看来可以好好研究一番了,哦,对了,我把脚本专家上的那段代码贴这儿备忘吧:-)

继续阅读“VBScript 读取或者修改文件的属性信息”